2

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

我有一个 Web 应用程序,它在启动期间通过反射扫描某些程序集(插件)并注册它们对公共内核的依赖关系。

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

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

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

提前致谢。

4

2 回答 2

5

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

Component.For<Test>.OnlyNewServices()

或者一次注册多个组件时:

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

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

于 2013-05-23T07:38:48.897 回答
0

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

于 2013-05-22T19:56:20.077 回答