Castle Windsor - 只注册一次组件

时间:2013-05-22 19:10:40

标签: castle-windsor castle

我想知道是否有一些最佳实践来实现我需要的功能。

我有一个Web应用程序,在启动期间,通过反射,扫描某些程序集(插件)并将其依赖项注册到公共内核。

外部库可能需要相同的依赖项。

例如,库A被扫描并且其依赖性D1被注册。然后扫描库B并尝试再次针对内核注册相同的依赖项 - D1。 如果我尝试两次注册相同的组件,Castle显然会抱怨。

我的问题是:当您只想跳过已注册的组件时,通常如何处理该方案。在执行此任务的IWindsorContainer上是否有一些扩展方法?

提前致谢。

2 个答案:

答案 0 :(得分:5)

您可以在注册声明中使用:

Component.For<Test>.OnlyNewServices()

或一次注册多个组件时:

Types.FromAssemblyContaining<Test>().InSameNamespaceAs<Test>().Configure(c => c.OnlyNewServices());

或适合您的变体。有条件注册,请参阅此链接:http://docs.castleproject.org/Windsor.Conditional-component-registration.ashx

答案 1 :(得分:0)

如果您确定所有依赖项(服务)都只在那些插件程序集中,您可以继续注册每个服务(我假设您知道哪些类型应该完全注册,即您以某种方式标记它们)来自每个插件程序集。您不必手动解决任何依赖项,因为这将由容器本身处理,因此您不必担心订购或双重注册问题。