2012-11-09 4 views
2

생성자 이름에 따라 다른 데이터베이스 인스턴스를 등록하려고합니다. Castle Windsor의 "첫 번째 승리"개념에 익숙하지만 분명히 이해하지 못했습니다.Castle Windsor 여러 인스턴스 등록

UAXmongoURL, UAXmongoConnection 매개 변수가있는 인스턴스를 제공하기 위해 아래의 uaxDB 매개 변수 이름에 ControllerInstaller에 신호를 보내고 싶습니다. 대신 USERmongoURL 및 USERmongoconnection 매개 변수를 사용하여 첫 번째 인스턴스를 가져옵니다. 그래서 ... 처음에는 승리하지만, 명명 된 인스턴스를 사용 했더라도? 명명 된 인스턴스가 기본 순서를 넘어서도록 어떻게 수정할 수 있습니까?

참고 아직 2 개 이상의 구성 요소를 순서대로 바꿀 뿐이므로 자세한 인스턴스가 있어야하므로 2를 넘어서는 확장이 필요합니다. 내가 뭘 잘못하고있어. 등록을

// Trying to avoid this constructor declaration in favor of the uncommented constructor 
// public DBViewerModel(IMongoConnection devDB, IMongoConnection uaxDB, IMongoConnection prodDB) 
public DBViewerModel(IMongoConnection mongoConnection) 
{ 
    //this.devMongoConnection = devDB; 
    //this.uaxMongoConnection = uaxDB; 
    //this.prodMongoConnection = prodDB; 
    this.mongoConnection = mongoConnection; 
} 

...

container.Register(
    Component 
     .For<IMongoConnection>() 
     .Named("dataDB") 
     .ImplementedBy<MongoConnection>() 
     .DependsOn(Property.ForKey("DBlocation").Eq(USERmongoURL), 
        Property.ForKey("DB").Eq(USERmongoCollection)) 
     .LifeStyle.PerWebRequest, 

    Component 
     .For<IMongoConnection>() 
     .Named("uaxDB") 
     .ImplementedBy<MongoConnection>() 
     .DependsOn(Property.ForKey("DBlocation").Eq(UAXmongoURL), 
        Property.ForKey("DB").Eq(UAXmongoCollection)) 
     .LifeStyle.PerWebRequest); 
+0

정말 다른 등록이 필요합니까? 구성 파일에서 연결 문자열을 읽고 해당 환경의 구성 값을 변경하는 구현을 하나만 가질 수 있습니까? – TylerOhlsen

+0

하지만 두 인스턴스를 동시에 실행하게 할 것입니다. 다른 모델은 하나의 앱에 다른 인스턴스가 모두 주입됩니다. – goldfinger

+0

"dataDB"또는 "uaxDB"중 어느 것을 사용하기로 선택했는지에 따라 DBViewerModel의 구성 요소 등록 예제를 보여줄 수 있습니까? – TylerOhlsen

답변

3

당신은 서비스 오버라이드 (override)에 의해 주입해야하는지 요소를 명시 적으로 지정할 수 있습니다

https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md#supplying-the-component-for-a-dependency-to-use-service-override

이 그것을 수행하는 방법 기존의 방법입니다 . 최신 버전의 Windsor를 사용하는 경우 대신 DependsOn(Dependency.OnComponent("uaxDB", "uaxDB")) API를 사용하는 것이 좋습니다.

관련 문제