伙计我需要你的帮助我在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中做到这一点?
答案 0 :(得分:1)
您应该使用Composition Root方法。
简而言之,您应该只在App-StartUp上使用Resolve一次,基本上解析MainView,并且您应该能够获得所有视图(最有可能通过TypedFactory)及其依赖关系而没有明确的Resolve调用
根据评论链接,服务定位器方法是一种可弃弃的反模式,特别是在可以使用组合根时。
在windsor wiki上,你会找到一个基于Silverlight app的样本,非常接近Winform场景。