C# MVC IOC、依賴註入
阿新 • • 發佈:2018-09-16
assembly tof package 組件 流行 獲取 .dll pack exe
在MVC5中依賴註入,本文介紹通過掃描類型RegisterAssemblyTypes來進行註冊
另外還有掃描模塊RegisterAssemblyModules來註冊
使用Autofac框架進行組件的依賴註入
Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個
先通過Nuget安裝程序包
PM> install-package atuofac
PM> install-package atuofac.mvc5
一般的做法是設計一個空的IDependency的接口,讓所有想要加入到IOC中的類實現這個接口
interface IDependency { }
public class NormalService:IDependency { public string testIoc() { return "IoC Test"; } }
在Global中進行設置
添加引用
using Autofac;
using Autofac.Integration.Mvc;//註冊Controller時需要
//獲取已加載到此應用程序域的執行上下文中的程序集。 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray();
// Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray(); //var assemblies = Assembly.GetExecutingAssembly(); //創建autofac管理註冊類的容器實例 ContainerBuilder builder = new ContainerBuilder();//註冊所有實現了 IDependency 接口的類型 Type baseType = typeof(IDependency); builder.RegisterAssemblyTypes(assemblies) .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) .AsSelf().AsImplementedInterfaces() .PropertiesAutowired() .InstancePerLifetimeScope(); // 設置MVC的DependencyResolver註冊點 builder.RegisterControllers(assemblies) .AsSelf() .PropertiesAutowired() .InstancePerLifetimeScope(); DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));
NormalService的使用
public NormalService normalService { get; set; } [HttpGet] public JsonResult GetIocMethod() { string strIocReturn= normalService.testIoc(); return Json(strIocReturn,JsonRequestBehavior.AllowGet); }
如果NormalService是實現接口INormalService的話
public interface INormalService { string testIoc(); }
public class NormalService:IDependency,INormalService { public string testIoc() { return "IoC Test"; } }
public INormalService normalService { get; set; } [HttpGet] public JsonResult GetIocMethod() { string strIocReturn= normalService.testIoc(); return Json(strIocReturn,JsonRequestBehavior.AllowGet); }
除了通過統一實現IDependency的方式來進行註冊外,單個類型的註冊
builder.RegisterType<NormalService>().As<INormalService>()
.AsSelf()
.PropertiesAutowired()
.InstancePerLifetimeScope();
builder.RegisterType<DbContextScopeFactory>().As<IDbContextScopeFactory>()
.AsSelf().AsImplementedInterfaces()
.InstancePerLifetimeScope().PropertiesAutowired();
這些就是在MVC中進行依賴註入的方式
C# MVC IOC、依賴註入