2011-03-02 5 views
6

ASP.NET 4 웹 응용 프로그램에서 OpenRasta 2.0.3214.437을 사용하고 있습니다.OpenRasta DI PerRequest 평생 문제

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

첫 번째 요청에는 완벽하게 작동합니다. , IRepository

DependencyLifetime.Singleton 및 DependencyLifetime.Transient가 잘 작동

:

종속성이 등록을하지 않은 다음, 생성자를 무시 : 두 번째 요청 메시지를 로깅 후 OpenRasta.DI.DependencyResolutionException가 발생합니다 PerRequest에 문제가있는 것 같습니다. 나는 카시니에서 뛰고있어. 내가 뭔가 잘못하고 있는거야? 이 문제에

+0

문제를 조사 할 수 있도록 몇 가지 테스트 코드로 메일 링리스트에 이메일을 게시 할 수 있습니까? – SerialSeb

+0

이 문제가 해결 되었습니까? 같은 것을 보았습니까? –

+0

내 지식에. 파이프 라인 제공자에게 의존성을 등록하는 것이 나의 해결책이었다. 또한 올바른 버전의 코드를 사용하고 있습니까? 저는 openrasta-core가 github (openrasta-stable가 아닌)라고 생각합니다. – Sam

답변

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에 기여를 등록 : 2.2 릴리스에서 해결

ResourceSpace.Uses.PipelineContributor<RepositoryPipelineContributor>(); 
+0

+1 샘 감사합니다, 기본값을 사용하여 동일한 문제가있었습니다. 내부 종속성 관리자 (ASP가 아닌 InMemoryHost 사용) 및이 해결 방법은 나를 위해 작동합니다. –