2010-06-25 3 views
2

StructureMap 구성StructureMap 동적 속성 설정 HttpRequest를

동적으로 요청의 기간은 그 요청이 완료된 후 기본값으로 다시 그 속성을 설정에만 속성 값을 주입하는 SM의 방법이 있나요?

특히 HttpRequest 컨텍스트를 참조하고 있습니다.

IDBAccessor 인터페이스와 DBAccessor 구체 구현이 있습니다.

IDBAccessor에는 연결 문자열에 대한 공용 속성이 있습니다.

내가 전달 된 일부 매개 변수입니다.

에 따라 각 HttpRequest에 대한 동적를 ConnectionString을 설정할

이 작업을 수행하기 쉬운 있습니까?

감사합니다.

답변

0

는 당신이 각 요청에 대한 연결 문자열을 결정하는 로직을 캡슐화하는 클래스가 가정합니다. 나는 그것을 ConnectionStringSource라고 부를 것이다. 그런 다음이 같은 StructureMap를 구성 할 수 있습니다 :

ObjectFactory.Initialize(x => 
{ 
    x.For<IDBAccessor>().HybridHttpOrThreadLocalScoped() 
     .Use(ctx => 
     { 
      var connectionString = ctx.GetInstance<ConnectionStringSource>().GetConnectionString(); 
      var dbAccessor = new DBAccessor {ConnectionString = connectionString}; 
      return dbAccessor; 
     }); 
}); 

public class ConnectionStringSource 
{ 
    public string GetConnectionString() 
    { 
     // determine the connection string somehow 
     return "connection string"; 
    } 
} 

HybridHttpOrThreadLocalScoped 호출은 각 HTTP 요청에 대한 DBAccessor의 새로운 인스턴스를 얻을 수 있는지 확인합니다. Use()Func<> 오버로드를 사용하면 각 요청 중에 코드를 실행하여 연결 문자열을 결정하고 설정할 수 있습니다.

참고 : 그냥 인터페이스에 그것을 속성을 대신 연결 문자열을 DBAccessor의 생성자 매개 변수를 확인 할 수 있습니다.