第一步:引入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文件夹下