1. 程式人生 > >AutoFac實現程序集級別的依賴註入

AutoFac實現程序集級別的依賴註入

數據 ron get implement bus pro vat ofa 2.2.3

1、介紹 所謂程序集級別的依賴註入是指接口和實現的依賴不使用配置文件或硬代碼實現(builder.RegisterType<UserInfoService>().As<IUserInfoService>();),而是通過名稱約定實現依賴註入 2、項目接口及dll 2.1 項目結構(創建MVC3項目) 技術分享圖片 技術分享圖片 2.2 UI層需引入的dll(使用nuget引入) 2.2.1 Autofac 2.2.2 Autofac.Integration.Mvc 2.2.3 MyMVC3.Business.IServices 2.2.4 MyMVC3.Modules.IRepository 2.2.5 MyMVC3.Modules.Model 3、依賴註入配置代碼(在Global.asax的Application_Start方法中調用)
/// <summary>
      /// 使用AutoFac實現依賴註入
      /// </summary>
      private void autoFac()
      {
          var builder = new ContainerBuilder();
          SetupResolveRules(builder);  //註入
 
          builder.RegisterControllers(Assembly.GetExecutingAssembly());  //註入所有Controller
          var container = builder.Build();
          DependencyResolver.SetResolver(
new AutofacDependencyResolver(container)); }
private void SetupResolveRules(ContainerBuilder builder)
       {
           //UI項目只用引用service和repository的接口,不用引用實現的dll。
           //如需加載實現的程序集,將dll拷貝到bin目錄下即可,不用引用dll
           var IServices = Assembly.Load("MyMVC3.Business.IServices");   
           
var Services = Assembly.Load("MyMVC3.Business.Services"); var IRepository = Assembly.Load("MyMVC3.Modules.IRepository"); var Repository = Assembly.Load("MyMVC3.Modules.Repository"); //根據名稱約定(服務層的接口和實現均以Service結尾),實現服務接口和服務實現的依賴 builder.RegisterAssemblyTypes(IServices, Services) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces(); //根據名稱約定(數據訪問層的接口和實現均以Repository結尾),實現數據訪問接口和數據訪問實現的依賴 builder.RegisterAssemblyTypes(IRepository, Repository) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces(); }
4、各層級間配置構造函數註入 4.1 UserInfoService
private IUserInfoRepository productRepository;
        public UserInfoService(IUserInfoRepository productRepository)
        {
            this.productRepository = productRepository;
            this.AddDisposableObject(productRepository);
        }

4.2 UserInfoService

public IUserInfoService userService;
 
      public HomeController(IUserInfoService userService)
      {
          this.userService = userService;
          this.AddDisposableObject(userService);
      }

AutoFac實現程序集級別的依賴註入