第一步:引入nuget包
Install-Package Autofac
Install-Package Autofac.MVC5
Install-Package Autofac.WebApi2
第二步:Autofac容器工廠
/// <summary>
/// Autofac容器工廠
/// </summary>
public class AutofacFactory
{
/// <summary>
/// Autofac容器對象
/// </summary>
private static IContainer _container;
/// <summary>
/// 註冊Autofac容器工廠
/// </summary>
public static void register()
{
//初始化
var builder = new ContainerBuilder();
// 注入MVC 控制器
builder.RegisterControllers(Assembly.GetCallingAssembly()).PropertiesAutowired();
// 注入WebApi 控制器
builder.RegisterApiControllers(Assembly.GetCallingAssembly()).PropertiesAutowired();
// 獲取bin文件夾中所有dll
var dataAccess = AppDomain.CurrentDomain.GetAssemblies();
// 注入Repository
builder.RegisterAssemblyTypes(dataAccess)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
// 注入Service
builder.RegisterAssemblyTypes(dataAccess)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
//創建容器
_container = builder.Build();
//設置MVC依賴注入
DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
//設置WebApi依賴注入
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container);
}
/// <summary>
/// 從Autofac容器獲取對象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T Get<T>()
{
return _container.Resolve<T>();
}
}
第三步:在 Global.asax 中注入 Autofac容器工廠實現自動注入
AutofacFactory.register();
第四步:使用
/// <summary>
/// 測試Api控制器
/// </summary>
public class TestController : ApiController
{
/// <summary>
/// 測試業務
/// </summary>
ITestService test;
/// <summary>
/// DI
/// </summary>
/// <param name="service"></param>
public TestController(ITestService service)
{
test = service;
}
/// <summary>
/// 測試方法
/// </summary>
/// <returns></returns>
[HttpGet]
public string show()
{
test.saveTran("張三", "張道陵");
return test.go();
}
}
注意:需要注入的類庫生成的dll文件一定要放在對應啓動項目的bin文件夾下