.NET依赖注入开发——Autofac篇

.NET依赖注入(DI)

依赖注入是做什么用的? 依赖注入又称之为控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。引用自百度百科。

它的好处是什么?去掉了繁琐的生命周期规则!(实例化时生命的先后顺序),让你在项目中随时随地想用就用。

?色哥对他的理解很简单。依赖注入,全称是“依赖注入到容器”, 容器(IOC容器)是一个设计模式,它也是个对象,你把某个类(不管有多少依赖关系)放入这个容器中,可以“解析”出这个类的实例。



DI针对NET有什么框架呢? Nuget有很多资源供大家选择Autofac、Unity、Ninject、StructureMap、Spring.Net以及Castle,色哥比较喜欢Autofa简单易用,abp的土耳其大牛喜欢Castle。 我今天以Autofac为例子供大家参考。


第一步,项目中打开Nuget管理器,搜索Autofac.Mvc并下载。

.NET依赖注入开发——Autofac篇_第1张图片

 添加了Autofac后,我们首先在web项目中建立个问题件加services(服务层,当然你也可以建立个其他项目),增加两个接口ICustomerService、IEncryptionService,并且实现他们。
 ![这里写图片描述](https://img-blog.csdn.net/20161215110941241?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZV9jb2xvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

 内容我细细的写了,主要看控制器和启动项。
 然后我们新建一个控制器HomeController,并且增加构造函数如下:
    #region Filed && Ctor
        private readonly IEncryptionService _encryptionService;
        public HomeController(IEncryptionService encryptionService)//这里就自动注入了
        {
            this._encryptionService = encryptionService;
        }
        #endregion

        // GET: Home
        public ActionResult Index()
        {
            ViewBag.Text = _encryptionService.EncryptText("加密字符串");

            //假设,我还有个服务,不需要其他函数调用,只有这里用到,那么可以解析出来使用
            //当然我们还可以封装下这个方法。
            using (var scope = MvcApplication.container.BeginLifetimeScope())
            {
                var customerService = scope.Resolve();
                ViewBag.Count = customerService.GetCustomerCount();
            }

            return View();
        }

然后我们在去设置下 Global

public class MvcApplication : System.Web.HttpApplication
    {
        #region 注入
        //这里一定要注意,首先依赖关系接口一定要设置为静态的,并且是public。不然用到的时候无法调用。
        public static IContainer container { get; set; }
        public void Dependency()
        {
            //实例化控制器
            var builder = new ContainerBuilder();
            //注册类型(映射实现类)
            builder.RegisterType().As();
            builder.RegisterType().As();
            //注册到控制器
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            container = builder.Build();
            //下面就是使用MVC的扩展 更改了MVC中的注入方式.
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
        #endregion


        protected void Application_Start()
        {
            Dependency();
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }
    }

启动项目试试吧。

大家如果有什么疑问请加群 68848430 咨询。
项目地址稍后更新

项目下载地址:http://download.csdn.net/detail/hb12417058/9712080

.NET依赖注入开发——Autofac篇_第2张图片
扫一扫添加关注,每天都有新知识

你可能感兴趣的:(模块化设计)