我想我会为那些在 mvc5 和 web api 2 中苦苦挣扎的人提供一些帮助。
首先添加nuget包
- 自动法
- Autofac asp.net mvc 5 集成
- Autofac asp.net web api 2.x 集成
在全局添加 application_start (或作为 app_start 类)添加对以下类的调用
AutofacConfig.RegisterAutoFac();
现在在 App_start 下添加这个类
using System.Reflection;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Mvc;
using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
namespace Example1.Web
{
public class AutofacConfig
{
public static IContainer RegisterAutoFac()
{
var builder = new ContainerBuilder();
AddMvcRegistrations(builder);
AddRegisterations(builder);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
return container;
}
private static void AddMvcRegistrations(ContainerBuilder builder)
{
//mvc
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterAssemblyModules(Assembly.GetExecutingAssembly());
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterModelBinderProvider();
//web api
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterModule<AutofacWebTypesModule>();
}
private static void AddRegisterations(ContainerBuilder builder)
{
//builder.RegisterModule(new MyCustomerWebAutoFacModule());
}
}
}
从现在开始,为您添加到项目中的每个新程序集添加一个新模块,然后在 AddRegisterations 函数中注册该模块(给出的示例)
注意:
我退回了容器,这不是必需的。
这会扫描当前程序集的模块,因此不要在 AddRegisterations 中添加本地模块,否则您将注册所有内容两次。