博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC3+AutoFac实现程序集级别的依赖注入
阅读量:7282 次
发布时间:2019-06-30

本文共 2198 字,大约阅读时间需要 7 分钟。

 

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方法中调用)
      
///         /// 使用AutoFac实现依赖注入        ///         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);        }

  

 
 
 
 
 
 
 
 
 
 

转载地址:http://sozjm.baihongyu.com/

你可能感兴趣的文章
呼和浩特“四个着力”瞄准中国云计算中心
查看>>
市场聚焦:美国民用安防DIY需求大
查看>>
云存储究竟是什么?
查看>>
直播行业红利可观,让星域CDN和云计算业务为迅雷贡献了三成营收
查看>>
“十三五”光伏发电能否破局 就看这六点了
查看>>
澳大利亚国防部更新云战略
查看>>
测试试卷-设计发表QQ说说功能列表和测试用例
查看>>
办公管理服务Service Partner One获千万美元A轮融资
查看>>
大数据欲立法 众专家把脉规则建立
查看>>
《淘宝店铺营销推广一册通》一1.5 搜索优化之产品发布
查看>>
第四大移动操作系统诞生:万万没想到是它
查看>>
你所不知道的 EMC 开源的那些事
查看>>
《大规模元搜索引擎技(1)》一2.3 挑战环境
查看>>
《数据结构与算法 C语言版》—— 1.7上机实验
查看>>
关于 Git 你所不知道的一些事
查看>>
《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——1.3 进程地址空间...
查看>>
中国青年报:COS 有义务回应公众质疑
查看>>
《HFSS电磁仿真设计从入门到精通》一第1章 HFSS概述
查看>>
Java并发/多线程教程——3多线程的开销
查看>>
ForestDB —— 快速的 Key-Value 存储引擎
查看>>