簡體   English   中英

MVVM SimpleIoc,當接口實現需要構造參數時如何使用接口

[英]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>()的調用則不會。

鏈接調用的一種可能方法是為兩種類型指定工廠方法, IMyServiceMyServiceImplementation ,即

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM