Как интегрировать Autofac с WepApi 2 и Owin?
Я использую этот пакет для интеграции 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);
}
Что мне не хватает?
Спасибо
Ответы
Ответ 1
Хорошо,
Я понял это.
Интеграция Autofac Owin на самом деле создает лифтоскоп Owin, доступный по всему трубопроводу Owin, доступный, таким образом, для промежуточного программного обеспечения и расширяющий этот lifetimecope до HttpRequestMessage. Это lifetimecope, отмеченный тегом AutofacWebRequest.
Таким образом, весь предыдущий код интеграции 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
Надеюсь, это полезно!