使用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)