C# 构造根上带有参数的依赖项链

C# 构造根上带有参数的依赖项链,c#,dependency-injection,structuremap,repository-pattern,C#,Dependency Injection,Structuremap,Repository Pattern,I以下依赖链: Handler() [depends on]--> Repository(string connectionString) 因此,我有一个IHandler,它依赖于IRepository,而IRepository又需要一个连接字符串。连接字符串是动态的,在运行时传递(因此无法从配置文件等中读取) 假设系统使用以下代码创建处理程序: var handler = ObjectFactory.GetInstance<IHandler>(); var handler

I以下依赖链:

Handler() [depends on]--> Repository(string connectionString)
因此,我有一个IHandler,它依赖于IRepository,而IRepository又需要一个连接字符串。连接字符串是动态的,在运行时传递(因此无法从配置文件等中读取)

假设系统使用以下代码创建处理程序:

var handler = ObjectFactory.GetInstance<IHandler>();
var handler=ObjectFactory.GetInstance();
这会失败,因为无法满足存储库依赖项(connectionString)。我的下一个想法是使用StructureMap的explicitTargets在依赖链构建的开始提供参数,即:

var arguments = new ExplicitArguments();
arguments.SetArg("connectionString", "SOME CONNECTION STRING");

var handler = ObjectFactory.GetInstance<IHandler>(arguments);
var arguments=new explicitTargets();
arguments.SetArg(“connectionString”,“某些连接字符串”);
var handler=ObjectFactory.GetInstance(参数);
这会失败,因为StructureMap现在希望在处理程序中找到connectionString依赖项(如果有,则不会将这些参数传递给存储库构造函数)


问题是:有没有一种方法可以通过在链的顶部提供参数并让StructureMap确定存储库需要connectionString参数来构造此链?

如果您对
存储库有影响,我建议您将构造函数更改为需要
IConnectionStringProvider
并向对象工厂注册实现该接口的类的实例。

container.Configure(r=>r
container.Configure(r => r
    .ForConcreteType<Repository>()
    .Configure.Ctor<string>().Is("some connection string"));
.ForConcreteType() .Configure.Ctor().Is(“某些连接字符串”);