Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组件特定的Castle Windsor类型工厂_C#_Database Connection_Castle Windsor_Typed Factory Facility - Fatal编程技术网

C# 组件特定的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

我有一个使用多个不同数据库连接的应用程序。我想使用Castle Windsor的类型化工厂支持,将返回
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(类型(连接工厂));

命名组件是否能满足您的需求?我认为这将允许您在注册时表达特定的依赖关系。