여러 데이터베이스 연결을 사용하는 응용 프로그램이 있습니다. 캐슬 윈저의 형식화 된 팩토리 지원을 사용하여 IDbConnection
의 인스턴스를 내 저장소 및 기타 구성 요소로 반환하는 팩토리를 주입하고 싶습니다.구성 요소 별 Castle Windsor 유형 공장
public interface IConnectionFactory
{
IDbConnection CreateConnection();
}
그리고 여기 샘플 저장소입니다 :
public class AccountRepository
{
private readonly IConnectionFactory connectionFactory;
public AccountRepository(IConnectionFactory connectionFactory)
{
this.connectionFactory = connectionFactory;
}
public Account FindAccountById(int id)
{
using (var connection = connectionFactory.CreateConnection())
{
// TODO use the connection here
}
}
}
그리고 내 구성 요소 등록 발췌 :
// ...
container.Register(Component.For<IDbConnection>()
.ImplementedBy<NpgsqlConnection>()
.LifestyleTransient());
container.Register(Component.For<IConnectionFactory>()
.AsFactory());
// ...
내 입력 된 공장 인터페이스가 보이는 방법은 다음과
입니다 내 IDbConnection
은 모두 같은 유형 (NpgsqlConnection
),하지만 필자는 여러 연결 문자열을 사용해야합니다. 이상적으로, 난 종속성으로 IConnectionFactory
을 가진 구성 요소에 따라 나를 위해 IDbConnection
(또는 연결 생성자로 전달)에 연결 문자열을 설정 윈저 설치하고 싶습니다. 예를 들어
:
- 내가 자신의 생성자에서 종속성으로
IConnectionFactory
을 두 저장소,AccountRepository
및ItemRepository
을 말해봐. foo
과bar
이라는 두 개의 연결 문자열이 있다고 가정 해 보겠습니다.AccountRepository
이IConnectionFactory.CreateConnection()
인 경우foo
을 사용하여IDbConnection
을 반환하고 싶습니다.ItemRepository
이IConnectionFactory.CreateConnection()
인 경우bar
을 사용하여IDbConnection
을 반환하고 싶습니다.
Castle Windsor에서 가능한가요?
이 주제를 연구했지만 필자의 정확한 시나리오에 맞는 솔루션을 찾지 못했습니다. 이상적으로, 내가 사용하는 정확한 연결 문자열의 무지 내 저장소를 유지하려는, 즉 I 이가 내 연결 팩토리를 변경하지 않으 : 나는 또한 모든 문서를 읽은
public interface IConnectionFactory
{
IDbConnection CreateConnection(string connectionStringName);
}
및 기사 내가 ISubDependencyResolver
과 ITypedFactoryComponentSelector
에서 찾을 수 있지만이 시나리오에 적용 할 수 있는지 또는 모든 것을 함께 조각하는지 잘 모르겠습니다.
그런데 Castle Windsor 3.1과 .NET 4.0을 사용하고 있습니다.
겠습니까라는 이름의 구성 요소는 당신이 원하는 무엇을주는?나는 이것이 당신이 등록 시간에 특정 의존성을 표현할 수 있다고 생각한다. –