zoukankan      html  css  js  c++  java
  • .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.后面具体调用就可以了,是不是很简单啊,小功告成。

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/songStar/p/8464849.html
Copyright © 2011-2022 走看看