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>();