6

我在 ASP.NET 4 Web 应用程序中使用 OpenRasta 2.0.3214.437。我正在使用以下方法在内部容器中注册自定义依赖项:

ResourceSpace.Uses.CustomDependency<IRepository, Repository>(DependencyLifetime.PerRequest);

这非常适合第一个请求;第二个请求在记录消息后引发 OpenRasta.DI.DependencyResolutionException:

忽略构造函数,以下依赖项没有注册:IRepository

DependencyLifetime.Singleton 和 DependencyLifetime.Transient 工作正常,只是 PerRequest 似乎有问题。我在卡西尼号上跑步。难道我做错了什么?

4

2 回答 2

5

此问题的解决方法:

实现一个 IPipelineContributor:

public class RepositoryPipelineContributor : IPipelineContributor
{
    private readonly IDependencyResolver resolver;

    public RepositoryPipelineContributor(IDependencyResolver resolver)
    {
        this.resolver = resolver;
    }

    public void Initialize(IPipeline pipelineRunner)
    {
        pipelineRunner.Notify(CreateRepository)
            .Before<KnownStages.IOperationExecution>();
    }

    private PipelineContinuation CreateRepository(ICommunicationContext arg)
    {
        resolver.AddDependencyInstance<IRepository>(new Repository(), DependencyLifetime.PerRequest);
        return PipelineContinuation.Continue;
    }

}

然后在您的 IConfigurationSource 中注册贡献者:

ResourceSpace.Uses.PipelineContributor<RepositoryPipelineContributor>();
于 2011-10-07T05:37:36.483 回答
0

已在 2.2 版本中修复,即将发布。

于 2013-10-31T13:41:42.583 回答