Интеграция Autofac с mediatr ASP.NET Web API2
Я разрабатываю приложение на asp.net api2 с autofac и mediatR, в настоящее время сталкивающееся с проблемой внедрения зависимостей.
// This is registered in the global.asax file and working properly in the controller level
//i'm trying to register the entity framework context as instance per request
builder.RegisterType<EFContext>().InstancePerRequest();
Однако при отправке команды через конвейер MediatR я получаю исключение, потому что поставщик услуг MetdiatR не может прочитать область запроса http.
Ниже код также находится в глобальном файле asax.
builder.Register<ServiceFactory>(context =>
{
var componentContext = context.Resolve<IComponentContext>();
return t => { object o;
return componentContext.TryResolve(t, out o) ? o : null; };
});
так как вызывается функция делегата для локатора службы, она выдает ошибку, говорящую, что никакой области видимости с тегом, совпадающим с "AutofacWebRequest", не видно из области видимости в....
Есть ли обходной путь, чтобы посредник ServiceFactory знал о области действия InofancePerRequest?
1 ответ
Использование InstancePerLifetimeScope
вместо этого для разрешения контекста структуры объекта.
Я не использовал mediatR, но похоже, что он не следует шаблону ответа на запрос, из-за чего Autofac не может связать с ним ни одно время жизни запроса.
Обратите внимание, что разница между областью запроса и сроком действия в Autofac заключается только в том, что Autofac будет обрабатывать запрос как время жизни.
Подробнее об областях вы можете прочитать здесь, https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html