Dependency injection StructureMap 2.6-如何在配置文件中执行此操作

Dependency injection StructureMap 2.6-如何在配置文件中执行此操作,dependency-injection,structuremap,ioc-container,Dependency Injection,Structuremap,Ioc Container,下面是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 =&

下面是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)
}
这很好用,但我想把它移到配置文件中,因为我不想在代码中直接引用concrete类型

关于2.6的文档不多。我找不到如何在配置中处理此问题

理想情况下,我希望将服务器、用户名和密码参数注入ObjectFactory,并了解如何在配置中使用这些参数

PS:不需要与StructureMap一起使用,任何支持此方案的IAC容器都是受欢迎的


谢谢

处理这种情况的最简单方法是引入一种新类型来提供基本构造函数args,并在代码中注册它。然后您可以注册该服务,并且该新类型可以由容器自动连接。这还允许您将服务器、用户名和密码的逻辑移入此新对象,并移出容器配置。

如果将映射移到配置xml文件,您将失去重构支持。你同意吗?是的,没关系。虽然这并不理想。我们需要能够在不重新编译代码的情况下更改实现。另外,我忘了告诉您,这个服务对象是树的一部分,所以我不能执行ObjectFactory.GetInstance。StructureMap自动解析它。我不明白,你不想引用什么具体类型,为什么不呢?如果我像我的示例那样用C代码进行配置,我需要添加服务类所属的程序集作为我的项目的引用。我不想这样做,因为将来会有相同IService接口的其他实现,我希望在不重新编译代码的情况下对其进行更改。如果structuremap配置在App.Config中,我可以轻松地用另一个来替换服务实现。嗨,罗宾,谢谢你的回复。我刚刚实现了与您描述的相同的方法,是的,它看起来更干净。但最后我搬到了CastleWindsor,因为它的文档要完整得多。我真的很难理解StructureMap的文档,特别是在xml配置方面没有太多帮助,看起来很多人都是通过代码进行配置的,如果您没有特定的需求,这是有意义的。再次感谢。