【发布时间】:2011-04-18 21:05:03
【问题描述】:
这里是c#代码:
var server = ******* some internal logic to determine server name ****
var username = ******* some internal logic to determine user name ****
var password = ******* some internal logic to determine password ****
ObjectFactory.Initialize(x =>
{
x.For<IService<bool>>().Add<Service>()
.Ctor<string>("server").Is(server)
.Ctor<string>("username").Is(username)
.Ctor<string>("password").Is(password)
}
这很好用,但我想把它移到配置文件中,因为我不想在我的代码中直接引用具体类型。
关于 2.6 的文档并不多。我找不到如何在配置中处理这个问题。
理想情况下,我想将服务器、用户名和密码参数注入到 ObjectFactory 以及如何在配置中使用这些参数。
(PS:不需要与 StructureMap 一起使用,任何可以支持此场景的 IAC 容器都将受到欢迎。)
谢谢
【问题讨论】:
-
如果您将映射移动到配置 xml 文件,您将失去重构支持。你同意吗?
-
是的,没关系。虽然并不理想。我们需要能够在不重新编译代码的情况下更改实现。
-
另外我忘了说,这个Service对象是树的一部分,所以我不能做ObjectFactory.GetInstance。 StructureMap 会自动解决它。
-
我不明白,你不想引用什么具体类型,为什么不呢?
-
如果我像示例中那样在 C# 代码中进行配置,我需要添加“Service”类所属的程序集作为对我的项目的引用。我不想这样做,因为将来会有相同 IService 接口的其他实现,我想在不重新编译代码的情况下更改它。如果结构图配置在 App.Config 中,我可以轻松地将 Service 实现替换为另一个。
标签: dependency-injection structuremap ioc-container