AutoFac与ASP.NET MVC结合使用
- MVC下的配置
- 通过NuGet安装AutoFac插件:Install-Package Autofac.Mvc5
- 在Global中调用:
var builder= new ContainerBuilder(); //注册当前程序集中的所有controller;加上PropertiesAutowired()后,再可以使用属性注入 builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired(); Assembly asmService= Assembly.Load("TestService"); //在bulider中获取不是抽象类的相关程序集;这块添加PropertiesAutowired()可以让接口调用其他接口, //实现接口间属性注入 builder.RegisterAssemblyTypes(asmService) .Where(t => !t.IsAbstract).AsImplementedInterfaces().PropertiesAutowired(); var container=builder.Build(); //注册在DepandencyResolver中 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- MVC下的使用
-
为自定义ModelBinder注入,还可以使用builder.RegisterModelBinders()等。
-
在Controller中只要声明Service的属性即可,AutoFac会自动完成属性注入
public class DefaultController : Controller { public ZSZ.Common.IUserService userService { get; set; } // GET: Default public ActionResult Index() { return View(); } }
并且在ActionFilter中也可以这样使用属性注入
-
只有AutoFac创建的对象才有可能进行自动属性的赋值;但是在没有注入的地方,如果想获取对象,可以这样:
ICityService cityService =DependencyResolver.Current.GetService<ICityService>()
4. 如果在quartz等单独的线程中,无法通过DependencyResolver.Current.GetService<ICityService>()获取,可以使用
var container = AutofacDependencyResolver.Current.ApplicationContainer; using (container.BeginLifetimeScope()) { cityService = container.Resolve<ICityService>(); }
作者:大胖儿在努力
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。