このパッケージを使用して、AutofacをWebApi Owinアプリケーションと統合します。
https://www.nuget.org/packages/Autofac.WebApi2.Owin
そしてこの記事に続いて:
http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/
Startup.csのコードは次のようになります。
var config = new HttpConfiguration();
IContainer container = EngineContext.InitializeEngine();
var dependencyResolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = dependencyResolver;
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
WebApiConfig.Register(config);
app.UseWebApi(config);
しかし、私がそれをどのようにスピンしたり、コードを再配置したりしても、Autofacは何も解決できません。 Owinの前は、Global.asaxメソッドがうまく機能していました。
protected void Application_Start()
{
IContainer container = EngineContext.InitializeEngine();
var dependencyResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver;
GlobalConfiguration.Configure(WebApiConfig.Register);
}
何が欠けていますか?
ありがとう
OK、
私はそれを考え出した。 Autofac Owin統合は、実際にはOwinリフトパイプスコープを作成します。これは、Owinパイプライン全体で使用できるため、ミドルウェアで使用でき、このライフタイムスコープをHttpRequestMessageに拡張します。これは、AutofacWebRequestタグでマークされたlifetimescopeです。
したがって、以前のWebApi統合コードはすべて、アプリケーションの起動時に実行する必要があります。私は含まれています:
var dependencyResolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = dependencyResolver;
しかし逃した:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
engineContext.Initializeメソッドで、ビルダーを介してすべての登録を行います。
ここでは、AutofacをWebApiと統合する方法に関する詳細情報を見つけることができます。これは、明らかにOwinの場合にも実行する必要があります。
https://code.google.com/p/autofac/wiki/WebApiIntegration
これがお役に立てば幸いです。