IOC(AutoFac)配置-学习资料

 IOC配置(先安装AutoFacMVC)
1、创建ioc容器,创建实例
var builder = new ContainerBuilder();
2、把当前程序集中的所有的Controller 都注册
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
3、获取所有相关类库的程序集
Assembly[] assemblies = new Assembly[] { Assembly.Load("RentHouse.Service") };

RentHouse.Service:对应的Service类库的名称

4、当请求这个程序集下的接口里面的方法时候。就会返回对应的Services类里面的实现
builder.RegisterAssemblyTypes(assemblies)
.Where(type => !type.IsAbstract
&& typeof(IServiceSupport).IsAssignableFrom(type))
.AsImplementedInterfaces().PropertiesAutowired();

IServiceSupport: 对应的接口层继承父类(接口层每个接口都继承父类,配置时直接控制父类即可达到对接口层所有接口的控制)
如果一个实现类中定义了其他类型的接口属性,会自动给属性进行“注入”
Assign:赋值
type1.IsAssignableFrom(type2) type2是否实现了type1接口/type2是否继承自type1
typeof(IServiceSupport).IsAssignableFrom(type)只注册实现了IServiceSupport的类
避免其他无关的类注册到AutoFac中

var container = builder.Build();
5、注册系统级别的DependencyResolver,这样当MVC框架创建Controller等对象的时候都是管Autofac要对象。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

直接配置在Global中

 

复制代码
using Autofac;
using Autofac.Integration.Mvc;
using HPIT.RentHouse.IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace HPIT.RentHouse.Admin
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            #region ioc配置
            //1、创建ioc容器,创建实例
            var builder = new ContainerBuilder();
            //2、把当前程序集中的所有的Controller 都注册
            builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
            //3、获取所有相关类库的程序集
            Assembly[] assemblies = new Assembly[] { Assembly.Load("HPIT.RentHouse.Service") };
            //4、当请求这个程序集下的接口里面的方法时候。就会返回对应的Services类里面的实现
            builder.RegisterAssemblyTypes(assemblies)
            .Where(type => !type.IsAbstract
                    && typeof(IServiceSupport).IsAssignableFrom(type))
                    .AsImplementedInterfaces().PropertiesAutowired();
            //如果一个实现类中定义了其他类型的接口属性,会自动给属性进行“注入”
            //Assign:赋值
            //type1.IsAssignableFrom(type2)   type2是否实现了type1接口/type2是否继承自type1
            //typeof(IServiceSupport).IsAssignableFrom(type)只注册实现了IServiceSupport的类
            //避免其他无关的类注册到AutoFac中

            var container = builder.Build();
            //5、注册系统级别的DependencyResolver,这样当MVC框架创建Controller等对象的时候都是管Autofac要对象。
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            #endregion
        }
    }
}
View Code
复制代码

 

posted @   Aliezerofist  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· Brainfly: 用 C# 类型系统构建 Brainfuck 编译器
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
阅读排行:
· DeepSeek 全面指南,95% 的人都不知道的9个技巧(建议收藏)
· 对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文
· Brainfly: 用 C# 类型系统构建 Brainfuck 编译器
· DeepSeekV3+Roo Code,智能编码好助手
· AI编程:如何编写提示词

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示