我是以下依赖链:
Handler() [depends on]--> Repository(string connectionString)
所以,我有一个依赖于IRepository的IHandler,而IRepository又需要一个连接字符串。连接字符串是动态的,并在运行时传递(因此无法从配置文件等中读取。)
想象一下,系统使用以下代码创建处理程序:
var handler = ObjectFactory.GetInstance<IHandler>();
这会失败,因为无法满足Repository依赖项(connectionString)。我的下一个想法是使用StructureMap的ExplicitArguments在依赖链构造的开头提供参数,即:
var arguments = new ExplicitArguments();
arguments.SetArg("connectionString", "SOME CONNECTION STRING");
var handler = ObjectFactory.GetInstance<IHandler>(arguments);
这会失败,因为StructureMap现在希望在Handler中找到一个connectionString依赖项(如果它有一个,则无论如何都不会将这些参数传递给Repository构造函数)。
问题是:有没有办法通过在其顶部提供参数并让StructureMap找出存储库需要connectionString参数来构造此链?
答案 0 :(得分:3)
container.Configure(r => r
.ForConcreteType<Repository>()
.Configure.Ctor<string>().Is("some connection string"));
答案 1 :(得分:1)
如果您对Repository
有影响,我建议您更改构造函数以要求IConnectionStringProvider
并注册实现该对象工厂接口的类的实例。