MVVM SimpleIoc,当接口实现需要构造参数时如何使用接口

Ber*_*eux 19 c# mvvm-light

使用MVVM的SimpleIoc,我想为给定的接口注册一个实现,但是实现在它的构造函数中需要一个参数:

public class MyServiceImplementation : IMyService {
    public MyServiceImplementation(string contructorString) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我希望注册接口的实现会起作用,但SimpleIoc在尝试解析接口时不考虑提示.

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

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>();
Run Code Online (Sandbox Code Playgroud)

有没有办法用SimpleIoc做到这一点,或者我应该考虑使用更完整的Ioc?

编辑:这样做的伎俩,但我仍然想知道为什么上面的表格不起作用.

SimpleIoc.Default.Register<IMyService>(() => {
    return new MyServiceImplementation("Hello World");
});
Run Code Online (Sandbox Code Playgroud)

Axe*_*ger 26

您的第一种方法不起作用的原因是SimpleIOC不会使用它自己来构造对象.

鉴于你的声明

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

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>();
Run Code Online (Sandbox Code Playgroud)

调用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>();
});
Run Code Online (Sandbox Code Playgroud)