使用 asp.net 核心配置每个请求/嵌套容器 StructureMap
Configure per request / nested container StructureMap using asp.net core
我试图在每个请求的基础上确定我的服务范围,但我注入的服务似乎总是在 parent/root 容器范围内,后续请求会看到前一个请求的状态。
我在启动时设置了自定义 StructureMap 容器 class
// Wireup the container
Container = new Container();
Container.Configure(config =>
{
// register the dotnet framework registered services into our container
config.Populate(services);
// Import all the registries
config.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.LookForRegistries();
});
});
return Container.GetInstance<IServiceProvider>();
在注册器中注册服务;
For<ITest>().Use<Test>().ContainerScoped();
然后连接以下中间件
var container = serviceProvider.GetRequiredService(typeof(IContainer)) as IContainer;
if (container != null)
{
using (var requestContainer = container.GetNestedContainer())
{
context.RequestServices = requestContainer.GetInstance<IServiceProvider>();
await _next.Invoke(context);
}
}
else
{
await _next.Invoke(context);
}
关于我遗漏了什么的任何指示?
谢谢
无需自己连接 RequestServices
属性。 ASP.NET 主持人已经为您完成了。只需从现有的 RequestServices
供应商处解决您的需求。
我试图在每个请求的基础上确定我的服务范围,但我注入的服务似乎总是在 parent/root 容器范围内,后续请求会看到前一个请求的状态。
我在启动时设置了自定义 StructureMap 容器 class
// Wireup the container
Container = new Container();
Container.Configure(config =>
{
// register the dotnet framework registered services into our container
config.Populate(services);
// Import all the registries
config.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.LookForRegistries();
});
});
return Container.GetInstance<IServiceProvider>();
在注册器中注册服务;
For<ITest>().Use<Test>().ContainerScoped();
然后连接以下中间件
var container = serviceProvider.GetRequiredService(typeof(IContainer)) as IContainer;
if (container != null)
{
using (var requestContainer = container.GetNestedContainer())
{
context.RequestServices = requestContainer.GetInstance<IServiceProvider>();
await _next.Invoke(context);
}
}
else
{
await _next.Invoke(context);
}
关于我遗漏了什么的任何指示? 谢谢
无需自己连接 RequestServices
属性。 ASP.NET 主持人已经为您完成了。只需从现有的 RequestServices
供应商处解决您的需求。