2009-02-24 148 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