OpenRasta DI PerRequest проблема жизни

Я использую OpenRasta 2.0.3214.437 в веб-приложении ASP.NET 4. Я регистрирую пользовательскую зависимость во внутреннем контейнере, используя:

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

Это отлично работает для первого запроса; второй запрос генерирует исключение OpenRasta.DI.DependencyResolutionException после регистрации сообщения:

Игнорируя конструктор, следующие зависимости не имели регистрации: IRepository

DependencyLifetime.Singleton и DependencyLifetime.Transient работают нормально, похоже, проблема в PerRequest. Я бегу в Кассини. Я делаю что-то неправильно?

2 ответа

Решение

Обходной путь к этой проблеме:

Реализуйте 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>();

Исправлено в версии 2.2, скоро выйдет нюгет.

Другие вопросы по тегам