C# 温莎Ioc始终避免呼叫解决

C# 温莎Ioc始终避免呼叫解决,c#,dependency-injection,inversion-of-control,castle-windsor,C#,Dependency Injection,Inversion Of Control,Castle Windsor,伙计们,我需要你们的帮助,我正在我的C#Winforms应用程序中使用Castle Project Windsor IoC容器。我有一些服务类,它们通过构造函数传递DI来实现存储库。我使用Windsor注册了所有组件。注册(…等),但每次使用服务类时,我都调用resolve。例如: var employeeService=container.Resolve…etc 有没有其他方法不必一直呼叫resolve? 在ASP.NET中,您只需注册它们,然后设置控制器工厂:ControllerBuilde

伙计们,我需要你们的帮助,我正在我的C#Winforms应用程序中使用Castle Project Windsor IoC容器。我有一些服务类,它们通过构造函数传递DI来实现存储库。我使用Windsor注册了所有组件。注册(…等),但每次使用服务类时,我都调用resolve。例如:
var employeeService=container.Resolve…etc

有没有其他方法不必一直呼叫resolve? 在ASP.NET中,您只需注册它们,然后设置控制器工厂:
ControllerBuilder.Current.SetControllerFactory(new WindsorIoCFactory());

有了它,我可以直接使用控制器(使用服务),而无需调用resolve。在winforms中如何做到这一点?

您应该使用一种方法

简而言之,您应该在应用程序启动时仅使用一次Resolve(解析),基本上解析MainView,通过它,您应该能够获得所有视图(很可能是通过a)及其依赖项,而无需显式解析调用

根据注释链接,服务定位器方法是一种不受欢迎的反模式,特别是当可以使用组合根时


在windsor wiki上,你会发现一个基于Winform场景的示例,非常接近Winform场景。

我认为这应该会帮助你解决问题。感谢Cristiano!将检查Composition RootHi Cristiano..如果我有很多服务,如employee、customer..等,并将它们全部注册到winforms中的start-up或main-method中,作为我没有的Composition root有一个问题,但我应该把我的容器实例放在哪里?它必须是一个像main一样的地方,或者它必须是静态的,在这里我可以全局调用它进行解析,对吗?哦,还有另一个问题,比如解析工厂?所以我不必引用(使用[namespace])在我称之为resolve?的每个.cs文件中,阅读本文,您应该会得到所有答案…以及上面wiki中的silverlight示例。但是,是的,您的容器应该作为私有变量隐藏在“Main”/“StartUp”类中,外部的任何人都不应该直接或通过ServiceLocator(又名“the evil”)访问它(见Krzysztof Koźmic):-)