2012-01-13 131 views
20

使用MVVM的SimpleIoc,我想註冊一個給定的接口的實現,但實現需要在其構造一個參數:MVVM SimpleIoc,如何使用接口時,該接口實現需要施工參數

public class MyServiceImplementation : IMyService { 
    public MyServiceImplementation(string contructorString) { ... } 
} 

我希望註冊接口的實現可以工作,但SimpleIoc在嘗試解析接口時不考慮提示。

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

有沒有辦法用SimpleIoc做到這一點,還是應該考慮使用更完整的Ioc?

編輯:這樣做的竅門,但我仍然想知道爲什麼上面的表單不起作用。

SimpleIoc.Default.Register<IMyService>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

回答

23

您的第一種方法不工作的原因是SimpleIOC不使用自己構造對象。

鑑於你的宣言

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

至​​呼叫將執行該工廠方法,而調用SimpleIoc.Default.GetInstance<IMyService>()不會。

一個可能的途徑鏈的調用可以指定兩種類型,IMyServiceMyServiceImplementation工廠方法,即

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService>(() => { 
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>(); 
}); 
+1

感謝@Obalix,這肯定比我自己一個更好的解決方法! – 2012-01-19 06:13:07