2011-04-14 23 views
2

的構造函數對類進行初始化StructureMap我試圖初始化StructureMap以注入只有一個構造函數的具體類,該構造函數接受4個字符串參數。使用具有參數

通常情況下,對於具有參數構造函數的類,我只是這樣做:

For<IMyClass>().Use<MyClass>(); 

但我會怎麼做,如果MyClass類有一個構造函數?

public class MyClass : IMyClass 
{ 
    public MyClass(string name, string etc) 
    { 

    } 
} 

回答

2

如果你想通過在註冊時就已經知道你可以用這個去的值:

For<IMyClass>().Use<MyClass>() 
    .Ctor<string>("name").Is("theName") 
    .Ctor<string>("etc").Is("etcetera"); 
+0

謝謝,這完美的作品 – JeffG 2011-04-15 12:18:43

1

這爲我工作

public interface IMyClass 
{ 
    string MyMethod(); 
} 

public class MyClass : IMyClass 
{ 
    private readonly string myName; 
    private readonly string myEtc; 

    public MyClass(string name, string etc) 
    { 
     myName = name; 
     myEtc = etc; 
    } 

    public string MyMethod() 
    { 
     return myName + myEtc; 
    } 
} 

public class FactoryTest 
{ 
    public string GetMyString() 
    { 
     RegisterMyClass(); 
     return ObjectFactory.GetInstance<IMyClass>().MyMethod(); 
    } 

    public void RegisterMyClass() 
    { 
     ObjectFactory.Initialize(
       f => f.For<IMyClass>().Use(x => new MyClass("a", "b"))); 
    } 
} 
+0

只添加'ObjectFactory.Initialize(F => f.For ()。使用(x => new MyClass(「a」,「b」)));'給出**沒有爲PluginFamily IMyClass定義的默認實例**然後我嘗試添加'For ()。使用(); '在Initialise調用之前,但獲得與以前相同的錯誤**缺少實例密鑰「13f56e3a-23a7-4822-9fa9-f61276fb8019」的請求實例屬性「username」** ** – JeffG 2011-04-15 12:08:23

+0

我們必須採取不同的做法。無論如何,PHeiberg的答案看起來更好 – boca 2011-04-15 13:36:27