2014-12-15 2 views
5

무대, 일부 인터페이스 및 등록 섹션이 있습니다. 문제는 일부 매개 변수를 고정 변수로 정의하고 다른 변수를 변수로 정의해야한다는 것입니다. 컨테이너 클래스의 고정 값 및 기타 변수를 지정하십시오.

interface IDoSomething { 
void DoWork(); 
} 

interface IDoMath(){ 
void DoWork(); 
} 

interface IBehaviorBusiness{ 
void Do(); 
} 

class BehaviorBusiness { 
... 
public BehaviorBusiness(IDoSomething doSomething, IDoMatch doMatch, string connection){}; 
... 
} 

은이 선언에서 매개 변수 연결을 정의하고 컨테이너 IDosomethingIDoMatch를 취할 윈저 컨테이너 수 있습니까?

container.Register(
    Component.For<IDoSomething>() 
    ... 
} 

container.Register(
    Component.For<IDoMatch>() 
    ... 
); 

이것은 구체적인 문제입니다.

container.Register(
    Component.For<IBehaviorBusiness>() 
    .ImplementedBy<BehaviorBusiness>() 
    .DependsOn(Dependency.OnComponent<IDoSomething, [default]>(), 
       Dependency.OnComponent<IDoMatch, [default]>(), 
       Dependency.OnValue("connection", connectionString)) 
    .LifeStyle.Transient 
    ); 

올바른 구문은 무엇입니까? 연결 문자열은 응용 프로그램 설정에서 오는 경우

+0

@PatrickQuirk 대답은 맞지만 IConnectionString 공급자 나 직접 IConnectionProvider를 만들고 직접 매개 변수가 아닌 ctor로 제공하는 것이 더 나은 방법이라고 생각합니다. 이 방법으로 특정 클래스는 매번 연결을 생성/관리/처리 할 책임이 없습니다. 다른 구성 요소에서 연결을 제공 한 다음 풀링 한 다음 처리하는 것은 어떻습니까? 이렇게하면 SRP를 유지하는 것만으로는 안되며 원칙을 유지하는 것이 아니라 코드의 유지 보수성을 유지할 수 있습니다. 연결 문자열의 사용 예가 있습니까? –

+0

프로젝트가 정말 작고 간단합니다. 당신 말이 맞아요. 마지막으로 내가 쿼리에 대한 더미 인터페이스에 대한 연결을 변경 공용 인터페이스 IDbContext를 업데이 트 { DataSet GetDataSet (string strmSql); DataTable GetDataTable (string strmSql); int ExecuteSql (string strmSql); } 일부는 정말 간단합니다 –

+0

@OgnyanDimitrov 어디에서 IConnectionString 구현에 대한 모범 사례를 읽을 수 있습니까? IConnectionProvider? 다음 주에는 정말로 진지한 곳에서 일하고 있으며 적절한 주제에 대해 조금 읽습니다. Iam은 EF 나 NHibernate 사용을 고려하고 있습니다 –

답변

1

, 다음 Dependency.OnAppSettingsValue() 사용

여기
container.Register(
    Component.For<IBehaviorBusiness>() 
    .ImplementedBy<BehaviorBusiness>() 
    .DependsOn(Dependency.OnAppSettingsValue("connection", "connectionString")) 
    .LifeStyle.Transient 
); 

는 "연결"이 클래스의 생성자와 "ConnectionString을"의 매개 변수의 이름은의 열쇠이다 응용 프로그램 설정 (예 : Web.Config)의 연결 문자열 값. 다른 값을 지정할 필요가 없으므로 Windsor가 평소대로 해결합니다.

+0

감사합니다. –