当前位置:   article > 正文

.NET依赖注入开发——Autofac篇_net7 autofac 不通过依赖注入初始化

net7 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并下载。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里写图片描述

 添加了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,并且增加构造函数如下:
  • 1
  • 2
  • 3
  • 4
  • 5
    #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<ICustomerService>();
                ViewBag.Count = customerService.GetCustomerCount();
            }

            return View();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

然后我们在去设置下 Global

public class MvcApplication : System.Web.HttpApplication
    {
        #region 注入
        //这里一定要注意,首先依赖关系接口一定要设置为静态的,并且是public。不然用到的时候无法调用。
        public static IContainer container { get; set; }
        public void Dependency()
        {
            //实例化控制器
            var builder = new ContainerBuilder();
            //注册类型(映射实现类)
            builder.RegisterType<EncryptionService>().As<IEncryptionService>();
            builder.RegisterType<CustomerService>().As<ICustomerService>();
            //注册到控制器
            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);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

启动项目试试吧。

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

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

这里写图片描述
扫一扫添加关注,每天都有新知识

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/141391
推荐阅读
相关标签
  

闽ICP备14008679号