2012-01-20 2 views
3

나는 다음과 같은 구성이 있습니다AutoFac 수명은 : 특정 상황에서 새로운 인스턴스를 강제

builder.Register<EntityContext>().As(
    c=> { 
     var entityCtx = new EntityContext(); 
     //snip snip: some config stuff 

     return entityCtx; 
    }).As<MyDbContext>().InstancePerLifetimeScope(); 

EntityContext 분명히 다시 DbContext에서 상속 MyDbContext에서 상속합니다. 내 저장소의 생성자에서

나는 보통이 내가 원하는 무엇을하는 HTTP 요청 당 한 CTX을 가지고 보장

... 
public MyRepository(MyDbContext context) {...} 

로 사용하고 있습니다. 하지만 이제 특정 저장소에 대해 다른 인스턴스 인의 EntityContext가 일반적으로 사용되는 것보다 필요하게되었습니다.

어떻게 달성할까요? 내가 Register<EntityContext>()....As<DbContext>()...

다른 아이디어를 사용

  • 또 다른 설정 : 다음은 내 마음에 온?

답변

3

제대로 이해할 수 있다면 AutoFac의 OwnedInstances을 사용하는 것이 적절한 해결책을 찾았습니다. 예를 들면 : 당신이 MyRepository이 다른 트랜잭션에서 실행하려는 경우

class MyRepository 
{ 
    public MyRepository(Owned<MyDbContext> context, MyDbContext context2) 
    { 
     //context and context2 are two different object instances 
    } 
} 

이 시나리오는 특히 유용 즉 그것은 다른 저장소와 다른 DbContext 인스턴스를 가질 필요가있다.

2

수명이 다르기 때문에 다른 설정을 사용하거나 컨테이너를 수동으로 호출하여 컨텍스트의 새 인스턴스를 제공하거나 컨텍스트 인스턴스를 직접 작성해야하지만 IoC 컨테이너를 사용할 때 수행하고 싶지 않은 작업이 필요합니다.).

+0

Thx, 어떻게 든 올바른 방향으로 나를 가리켰다. 방금 AutoFac으로 이것을 구현하는 방법에 대한 해결책을 찾았습니다. – Juri

관련 문제