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 @ 2020-12-29 13:59  Aliezerofist  阅读(160)  评论(0编辑  收藏  举报