C# 组件特定的Castle Windsor类型工厂
我有一个使用多个不同数据库连接的应用程序。我想使用Castle Windsor的类型化工厂支持,将返回C# 组件特定的Castle Windsor类型工厂,c#,database-connection,castle-windsor,typed-factory-facility,C#,Database Connection,Castle Windsor,Typed Factory Facility,我有一个使用多个不同数据库连接的应用程序。我想使用Castle Windsor的类型化工厂支持,将返回IDbConnection实例的工厂注入到我的存储库和其他组件中 我的类型化工厂的界面如下所示: public interface IConnectionFactory { IDbConnection CreateConnection(); } 下面是一个示例存储库: public class AccountRepository { private readonly ICon
IDbConnection
实例的工厂注入到我的存储库和其他组件中
我的类型化工厂的界面如下所示:
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
}
}
}
Component.For<AccountRepository>()
.DependsOn(
ServiceOverride.ForKey<IConnectionFactory>().Eq(typeof(ConnectionAFactory)));
以及我的组件注册摘要:
// ...
container.Register(Component.For<IDbConnection>()
.ImplementedBy<NpgsqlConnection>()
.LifestyleTransient());
container.Register(Component.For<IConnectionFactory>()
.AsFactory());
// ...
我还阅读了在isubdependencysolver
和ITypedFactoryComponentSelector
上可以找到的所有文档和文章,但我不确定它们是否适用于此场景,或者如何将所有内容组合在一起
顺便说一下,我使用的是Castle Windsor 3.1和.NET 4.0。可能使用的是真正的工厂,而不是键入的工厂:
public ConnectionAFactory : IConnectionFactory
{
public ConnectionAFactory()
{
this.connectionString = "foo";
}
}
并在windsor的正确存储库中注册:
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
}
}
}
Component.For<AccountRepository>()
.DependsOn(
ServiceOverride.ForKey<IConnectionFactory>().Eq(typeof(ConnectionAFactory)));
Component.For()
德彭森先生(
ServiceOverride.ForKey().Eq(类型(连接工厂));
命名组件是否能满足您的需求?我认为这将允许您在注册时表达特定的依赖关系。