2012-01-13 36 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