23

次のように autofac の MVC 統合を使用しました。

...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

しかし今、新しい Web Api RTM を使用してソリューションを再作成したいと考えています。そして、新しい AutofacWebApiDependencyResolver クラスを使用したいと考えています。

しかし、AutofacWebApiDependencyResolver でこれを行うと、次のエラーが発生しました。

タイプ Autofac.Integration.WebApi.AutofacWebApiDependencyResolver は、Microsoft.Practices.ServiceLocation.IServiceLocator を実装していないようです。

リゾルバーを設定するには、今これを行う必要があることを読みました:

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

しかし、「=」で設定すると、設定されません。そのまだ DefaultResolver...

MVC AutofacDependencyResolver クラスを再度使用すると、機能します。

autofac と web api rtm にはまだ問題がありますか? (現在の統合は RC バージョンです)

4

2 に答える 2

56

ASP.Net Wep.API と ASP.NET MVC は 2 つの異なるものを使用するIDependencyResolverため (ASP.NET MVC に依存しないように Wep.API を設計したため)、両方をセットアップする必要があります。

var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = 
     new AutofacWebApiDependencyResolver(container);

そのため、AutofacDependencyResolver通常の MVCController派生コントローラーに品位を注入する必要があります。

また、AutofacWebApiDependencyResolver依存関係を Web.APIApiController派生コントローラーに注入するために必要です。

また、呼び出しを使用してコンテナー ビルダーに Api コントローラーを登録することを忘れないでください (通常のbuilder.RegisterControllers方法とは異なります)。

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
于 2012-09-05T08:01:48.890 に答える