标签:containe sse .config prot tpc 对象 webapi home tor
在asp.net mvc控制器中使用Autofac来解析依赖
如下Controller中使用构造函数依赖注入接口IUserService:
public IUserService _IUserService; public HomeController(IUserService IUserService) { _IUserService = IUserService; }
如何使用AutoFac如下:
1、首先引用AutoFac包
同时也要看一下你的EF版本是多少的,否则会报无法加载“EntityFromwork” 之类的错误
如果是EF是6.0那么还需要引用一个文件,如下:
如果是其他版本的相应的引用AutoFac.MVC3、AutoFac.MVC4
1、在App_Start创建类文件AutofacConfig.cs
引用命名空间:
using Autofac; using Autofac.Integration.Mvc;
以下为单个注册方法:
//创建autofac管理注册类的容器实例 var builder = new ContainerBuilder(); //下面就需要为这个容器注册它可以管理的类型 //builder的Register方法可以通过多种方式注册类型,之前在控制台程序里面也演示了好几种方式了。 builder.RegisterType<UserService>().As<IUserService>(); //builder.RegisterType<DefaultController>().InstancePerDependency(); //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册 builder.RegisterControllers(Assembly.GetExecutingAssembly());
//生成具体的实例 var container = builder.Build(); //下面就是使用MVC的扩展 更改了MVC中的注入方式. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
以下为批量注册方法:
namespace AutoFacConfigure.App_Start { public class AutofacConfig { /// <summary> /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建 /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作 /// </summary> public static void Register() { //实例化一个autofac的创建容器 var builder = new ContainerBuilder(); //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (WebUI) Assembly controllerAss = Assembly.Load("AutoFacConfigure"); builder.RegisterControllers(controllerAss); //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例(数据操作层) Assembly respAss = Assembly.Load("AutoFacConfigure.Respoisty"); //创建respAss中的所有类的instance以此类的实现接口存储 builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces(); //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例(业务逻辑层) Assembly serpAss = Assembly.Load("AutoFacConfigure.Service"); //创建serAss中的所有类的instance以此类的实现接口存储 builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces(); // builder.RegisterType<>().As<>(); //创建一个Autofac的容器 var container = builder.Build(); //将MVC的控制器对象实例 交由autofac来创建 DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } } }
2、在全局Global.asax类Application_Start()方法中调用AutofacConfig配置类方法
protected void Application_Start(object sender, EventArgs e) { AutofacConfig.Register(); }
3、Web Api配置Autofac方法
引用
using Autofac.Integration.WebApi;
参考资料:http://docs.autofac.org/en/latest/integration/webapi.html
var builder = new ContainerBuilder(); // Get your HttpConfiguration. var config = GlobalConfiguration.Configuration; // Register your Web API controllers. builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); // OPTIONAL: Register the Autofac filter provider. builder.RegisterWebApiFilterProvider(config); // Set the dependency resolver to be Autofac. var container = builder.Build(); config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
标签:containe sse .config prot tpc 对象 webapi home tor
原文地址:https://www.cnblogs.com/youmingkuang/p/9946113.html