zoukankan      html  css  js  c++  java
  • AutoFac学习摘要

    依赖注入(控制反转)
    常见的依赖注入工具:AutoFac,Spring.Net,Unity等
    依赖注入的方式:1.通过构造函数进行注入2.通过属性进行注入

    注意:在项目中AutoFac的注入有两次,第一次是将数据访问层的类注入到业务逻辑层。第二次是将业务逻辑层的类注入到UI层。

    AutoFac在MVC的使用

    我在APP_Start文件夹中新建了一个类命名为AutoFacConfig

    定义一个静态的无返回的方法

    public static void Register()

    {

      

    //1.0 创建一个autofac的容器对象
                var bulider = new ContainerBuilder();
                //1.0.1 获取程序集载入到Assembly对象中
                Assembly controllerDll = Assembly.Load("Study.CRM.Site");
                //1.0.1 告诉autofac对象将来实例化的控制器所存在的程序集是Study.CRM.Site.dll
                bulider.RegisterControllers(controllerDll);

                #region 2.0 仓储的注册
                //2.0 利用bulider对象开始创建仓储的实现类与对应的仓储接口的对应关系
                //注意:如果加了InstancePerHttpRequest() 每次都是的新的实体进行注入操作

                //注册单个仓储来到其对应的接口
                //bulider.RegisterType(typeof(sysFunctionRepository)).As(typeof(IsysFunctionRepository)).InstancePerHttpRequest();

                //注册程序中所有的类到其实现接口
                Assembly repositoryAss = Assembly.Load("Study.CRM.Repository");
                bulider.RegisterTypes(repositoryAss.GetTypes()).AsImplementedInterfaces();

                #endregion

                #region 3.0 业务逻辑层的注册
                //3.0 利用bulider对象开始创建业务逻辑实现类与对应的业务逻辑接口的对象关系
                //单个注册业务逻辑类到其对应的接口
                //bulider.RegisterType(typeof(sysFunctionServices)).As(typeof(IsysFunctionServices)).InstancePerHttpRequest();

                //注册业务逻辑程序中的所有类到其实现的接口(AsImplementedInterfaces() 此方法:就是用来自动转成接口的)
                Assembly servicesAss = Assembly.Load("Study.CRM.Services");
                bulider.RegisterTypes(servicesAss.GetTypes()).AsImplementedInterfaces();

                //注册当前程序中类型名称的前缀为sysFunction 的所对应类的实例
                //bulider.RegisterTypes(servicesAss.GetTypes().Where(c => c.Name.StartsWith("sysFunction")).ToArray()).AsImplementedInterfaces();

                #endregion

                //4.0 告诉MVC框架将来所有控制器的对象的创建工作交给autofac.dll中的控制器工厂来完成
                //特点:会利用控制器中的有参数构造函数创建其对象,同时在创建的过程中,会根据构造函数中的
                //接口参数,将此接口的具体实现类的对象注入
                //4.0.1  根据已经注册好的组建创建此容器对象中所有的映射关系的具体实现
                var container = bulider.Build();
                // 4.0.2 将MVC的控制器对象实例 交由autofac来创建
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

    }

    在global文件中进行注册

     public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                //注册区域路由规则
                AreaRegistration.RegisterAllAreas();
                //注册全局过滤器
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                //注册网站路由
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                //优化js,css文件
                BundleConfig.RegisterBundles(BundleTable.Bundles);

                //利用AutoFac实现项目的IOC和DI
                AutoFacConfig.Register();
            }
        }

  • 相关阅读:
    poj1113--凸包(Andrew)
    php变量内存完全释放
    php的内存分配还是很智能的
    git 忽略权限记录一下
    开启事务处理插入多条数据 速度也可以
    var_dump(is_writeable(ini_get("session.save_path")));
    要注意一下xss攻击啊
    select *," as A from B union ...
    多次踩坑
    js instanceof运算符
  • 原文地址:https://www.cnblogs.com/Mrkaisa/p/6838847.html
Copyright © 2011-2022 走看看