使用asp.net核心配置每个请求/嵌套容器StructureMap

时间:2016-09-19 15:02:25

标签: asp.net-core structuremap4

我试图在每个请求的基础上调整我的服务范围,但是我注入的服务似乎总是限定为父/根容器,后续请求看到前一个请求的状态。

我在启动类

中设置了自定义StructureMap容器
// 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);
}

关于我缺少什么的任何指示? 感谢

1 个答案:

答案 0 :(得分:1)

您无需亲自连接RequestServices财产。 ASP.NET主机已经为您完成了这项工作。只需从现有的RequestServices提供商处解决所需问题。