温莎城堡在嵌套 类 中注入依赖项,根接口在运行时解析
Windsor castle injecting dependency in nested classes with root interface resolved at runtime
我有一系列 类 和我使用依赖注入的接口。问题是 "root" 接口在运行时被解析。因此我不知道如何使用温莎城堡为层次结构中的接口 "higher" 注入依赖项。
这是一个例子:
public interface IConnectionSettings
{
string ConnectionString { get; }
}
public class TestEnvironmentConnectionSettings
{
string ConnectionString { get; }
public TestEnvironmentConnectionSettings(EEnvironment environment)
{
ConnectionString = "ConnectionStringTo" + environment;
}
}
public interface IDatabaseConnection
{
IEnumerable<T> RunQuery<T>(string query);
}
public class DatabaseConnection : IDatabaseConnection
{
private readonly IConnectionSettings _connectionSettings;
public DatabaseConnection(IConnectionSettings connectionSettings)
{
_connectionSettings = connectionSettings;
}
public IEnumerable<T> RunQuery<T>(string query)
{
// do something and return results
}
}
public interface IPersonConnection
{
Person GetPerson(int id);
}
public class PersonConnection : IPersonConnection
{
private readonly IDatabaseConnection _databaseConnection;
public PersonConnection(IDatabaseConnection databaseConnection)
{
_databaseConnection = databaseConnection;
}
public GetPerson(int id)
{
// prepare query and return results
}
}
问题是一旦我知道我将使用哪个 EEnvironment,我想获得一个 PersonConnection 的实例。但是现在我必须构建 TestEnvironmentConnectionSettings 来获取 DatabaseConnection 和 PersonConnection 等。Windor Castle 可以帮助我这样做,这样我就不必创建工厂了吗?还是我的代码设计不正确?
如果您不直接向构造函数提供 EEnvironment
而是提供一个可以提供 EEnvironment
的接口(来自配置、数据库等),并使用适当的非单例生活方式(瞬态、作用域等)然后当您从 Castle Windsor 容器解析 PersonConnection
时,依赖项也将被解析并建立适当的数据库连接。
我有一系列 类 和我使用依赖注入的接口。问题是 "root" 接口在运行时被解析。因此我不知道如何使用温莎城堡为层次结构中的接口 "higher" 注入依赖项。
这是一个例子:
public interface IConnectionSettings
{
string ConnectionString { get; }
}
public class TestEnvironmentConnectionSettings
{
string ConnectionString { get; }
public TestEnvironmentConnectionSettings(EEnvironment environment)
{
ConnectionString = "ConnectionStringTo" + environment;
}
}
public interface IDatabaseConnection
{
IEnumerable<T> RunQuery<T>(string query);
}
public class DatabaseConnection : IDatabaseConnection
{
private readonly IConnectionSettings _connectionSettings;
public DatabaseConnection(IConnectionSettings connectionSettings)
{
_connectionSettings = connectionSettings;
}
public IEnumerable<T> RunQuery<T>(string query)
{
// do something and return results
}
}
public interface IPersonConnection
{
Person GetPerson(int id);
}
public class PersonConnection : IPersonConnection
{
private readonly IDatabaseConnection _databaseConnection;
public PersonConnection(IDatabaseConnection databaseConnection)
{
_databaseConnection = databaseConnection;
}
public GetPerson(int id)
{
// prepare query and return results
}
}
问题是一旦我知道我将使用哪个 EEnvironment,我想获得一个 PersonConnection 的实例。但是现在我必须构建 TestEnvironmentConnectionSettings 来获取 DatabaseConnection 和 PersonConnection 等。Windor Castle 可以帮助我这样做,这样我就不必创建工厂了吗?还是我的代码设计不正确?
如果您不直接向构造函数提供 EEnvironment
而是提供一个可以提供 EEnvironment
的接口(来自配置、数据库等),并使用适当的非单例生活方式(瞬态、作用域等)然后当您从 Castle Windsor 容器解析 PersonConnection
时,依赖项也将被解析并建立适当的数据库连接。