私は、mvc5 と web api 2 でこれに苦労している人々を少し助けたいと思いました。
最初にナゲットパッケージを追加します
- オートファク
- 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 にローカル モジュールを追加しないでください。そうしないと、すべてを 2 回登録することになります。