StructureMap创建实例

时间:2009-02-24 20:47:26

标签: c# .net inversion-of-control structuremap

我有启动时配置的接口的具体类型,但我想在运行时使用设置属性或在构造函数中设置不同的值来创建具体类型的实例。我看到的所有实例创建都知道具体类型是什么,在运行时我不知道具体类型。有没有办法在不知道具体类型的情况下创建接口/类的具体实例?这就是我所看到的:

[Test]
public void DeepInstanceTest_with_SmartInstance()
{
    assertThingMatches(registry =>
    {
        registry.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
                .WithCtorArg("name").EqualTo("Jeremy")
                .WithCtorArg("count").EqualTo(4)
                .WithCtorArg("average").EqualTo(.333);
        });
}

OR:

var container = new  Container(x =>
{
    x.ForConcreteType<SimplePropertyTarget>().Configure
     .SetProperty(target =>
     {
         target.Name = "Max";
         target.Age = 4;
     });
});

我想做类似的事情......但不知道具体的类型....只有抽象类或接口(在这种情况下会有属性)。具体类型已配置。

2 个答案:

答案 0 :(得分:2)

根据Jeremy Miller(StructureMap的作者)的指示找到答案。以下是他指出的地方:

http://structuremap.sourceforge.net/RetrievingServices.htm#section5

这是我使用的一个例子:

IDatabaseRepository repo =
                ObjectFactory.With("server").EqualTo("servername").
                With("database").EqualTo("dbName").
                With("user").EqualTo("userName").
                With("password").EqualTo("password").
                GetInstance<IDatabaseRepository>();

答案 1 :(得分:0)

您需要某种factory pattern来创建具体实例。创建的瞬间必然需要知道具体实现是什么。