Windsor Ioc一直避免呼叫解决

时间:2013-12-03 15:47:51

标签: c# dependency-injection inversion-of-control castle-windsor

伙计我需要你的帮助我在C#Winforms应用程序中使用Castle Project Windsor IoC容器。我有服务类,通过构造函数传递实现存储库的DI。我使用Windsor将它们全部注册到Component.Register(...等,但每次我使用我的服务类时我都会调用resolve。例如:
var employeeService = container.Resolve....etc
 有没有其他方法不必一直打电话给解决方案? 在ASP.NET中,您可以只注册它们然后设置控制器工厂:
ControllerBuilder.Current.SetControllerFactory(new WindsorIoCFactory());
有了这个,我可以直接使用我的控制器(使用服务)而无需调用resolve。你怎么在winforms中做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该使用Composition Root方法。

简而言之,您应该只在App-StartUp上使用Resolve一次,基本上解析MainView,并且您应该能够获得所有视图(最有可能通过TypedFactory)及其依赖关系而没有明确的Resolve调用

根据评论链接,服务定位器方法是一种可弃弃的反模式,特别是在可以使用组合根时。

在windsor wiki上,你会找到一个基于Silverlight app的样本,非常接近Winform场景。