• .NET 依赖注入Autofac实践


    项目之前用的是Ninject,最近比较流行AutoFac,所以决定自己倒持配置一下,不过之前是比较简单。项目框架是从.netframework4.0升级到了4.5,刚开始运行报错,因为视图的配置文件没有跟着一起更改,改后跑起来了。

    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
          <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
      </configSections>

    这是后来更改的版本号

    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
          <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
      </configSections>

    还有这个也要改

    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

    因为框架是通过nuget升级安装的,所以大的配置文件就不需要更改了。其实这个版本号要是不放心直接新建一个MVC空项目,直接把配置信息拷贝过来即可。

    好了,现在言归正传,具体注入AutoFac

    1.要在Nuget管理包下载AutoFac与AutoFac.MVC5

    2.添加服务层的IUserRepository、IClassRepository接口与对应实现。

    3.修改global配置文件

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

    调用Dependency方法

    protected void Application_Start()
            {
                Dependency();
                AreaRegistration.RegisterAllAreas();
                …………
            }

    4.为了减少每次controller里面都对字段的定义,现在在公共的控制器定义对应的字段,公共的控制器:BaseController

            #region Autofac依赖注入
            protected IUserRepository UserRepository;
           
            protected  IClassRepository ClassRepository; 
    
            #endregion

    5.在具体的控制器里面对其构造函数依赖注入

     public UserOperatorController(IUserRepository userRepository)
            {
                UserRepository = userRepository;
            }

     6.后面具体调用就可以了,是不是很简单啊,小功告成。

  • 相关阅读:
    spring mvc+ELK从头开始搭建日志平台
    java分布式系统开关功能设计(服务升降级)
    可伸缩性架构常用技术
    大众点评订单系统分库分表实践
    分布式缓存--系列1 -- Hash环/一致性Hash原理
    Netty原理剖析
    一个轻量级分布式 RPC 框架 — NettyRpc
    HDU 2583 permutation
    HDU 2573 Typing
    c语言中逗号运算符和逗号表达式
  • 原文地址:https://www.cnblogs.com/songStar/p/8464849.html
Copyright © 2020-2023  润新知