1

我有一个应用程序,其中共享对象需要对每个请求对象的引用。

共享:引擎
                |
每请求:IExtensions()
                |
             要求

如果我尝试将IExtensions直接注入 的构造函数Engine,即使是Lazy(Of IExtension),我也会得到“在请求实例的范围内没有可见范围匹配 [Request]”。当它尝试实例化每个IExtension.

如何创建 HttpRequestScoped 实例,然后将其注入共享实例?

将其设置在Request' 工厂中(并因此注入Engine)是否被认为是一种好习惯RequestFactory

4

1 回答 1

1

由于共享生命周期的要求,Engine您不能将请求范围的扩展注入其中。您可能拥有的是 Engine 上的一个方法或属性,它将主动解析来自当前请求范围的扩展集合。

所以首先,让我们Engine看一个构造函数依赖:

public class Engine
{
    public Engine(..., Func<IExtensions> extensionsPerRequest) 
    {
        _extensionsPerRequest = extensionsPerRequest;
    }


    public IExtensions Extensions
    {
       get { return _extensionsPerRequest(); }
    }
 }

然后,在您的 Autofac 注册中:

builder.Register<Func<IExtensions>>(c => RequestContainer.Resolve<IExtensions>());
于 2010-04-08T14:11:18.717 回答