2009-02-24 150 views
2

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

从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>(); 
0

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

+1

你不需要一个工厂模式,因为StructureMap需要照顾的那个你。尽管我确实找到了答案......谢谢。 – CSharpAtl 2009-02-25 13:58:56