[英]MVVM SimpleIoc, how to use an interface when the interface implementation requires construction parameters
使用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");
});
您的第一種方法不起作用的原因是SimpleIOC不會使用它自己來構造對象。
鑒於你的聲明
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService, MyServiceImplementation>();
對SimpleIoc.Default.GetInstance<MyServiceImplementation>()
的調用將執行工廠方法,而對SimpleIoc.Default.GetInstance<IMyService>()
的調用則不會。
鏈接調用的一種可能方法是為兩種類型指定工廠方法, IMyService
和MyServiceImplementation
,即
SimpleIoc.Default.Register<MyServiceImplementation>(() => {
return new MyServiceImplementation("Hello World");
});
SimpleIoc.Default.Register<IMyService>(() => {
return SimpleIoc.Default.GetInstance<MyServiceImplementation>();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.