将 Autofac 与 mediatr ASP.NET Web API2 集成
Integrate Autofac with mediatr ASP.NET Web API2
我使用 autofac 和 mediatR 在 asp.net api2 上开发了一个应用程序,目前面临依赖注入的一些问题。
// 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" 在范围内可见....
是否有任何解决方法可以让 mediatr ServiceFactory 知道 autofact InstancePerRequest 范围?
使用 InstancePerLifetimeScope
来解析 entity framework 上下文。
我没有使用过 mediatR,但它似乎不遵循请求响应模式,因此 Autofac 无法将任何请求生命周期与其相关联。
请注意,Autofac 中 Request Scope 和 Lifetime Scope 的区别仅在于 Autofac 会将请求视为生命周期。
您可以从此处进一步了解范围,
https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html
我使用 autofac 和 mediatR 在 asp.net api2 上开发了一个应用程序,目前面临依赖注入的一些问题。
// 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" 在范围内可见....
是否有任何解决方法可以让 mediatr ServiceFactory 知道 autofact InstancePerRequest 范围?
使用 InstancePerLifetimeScope
来解析 entity framework 上下文。
我没有使用过 mediatR,但它似乎不遵循请求响应模式,因此 Autofac 无法将任何请求生命周期与其相关联。
请注意,Autofac 中 Request Scope 和 Lifetime Scope 的区别仅在于 Autofac 会将请求视为生命周期。
您可以从此处进一步了解范围, https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html