我想知道是否有一些最佳实践来实现我需要的功能。
我有一个 Web 应用程序,它在启动期间通过反射扫描某些程序集(插件)并注册它们对公共内核的依赖关系。
外部库可能需要相同的依赖项。
例如,库 A 被扫描并注册其依赖项 D1。然后扫描库 B 并尝试再次针对内核注册相同的依赖项 - D1。如果我尝试两次注册相同的组件,Castle 显然会抱怨。
我的问题是:当您只想跳过已注册的组件时,您通常如何处理这种情况。IWindsorContainer 上是否有一些扩展方法可以执行此任务?
提前致谢。
我想知道是否有一些最佳实践来实现我需要的功能。
我有一个 Web 应用程序,它在启动期间通过反射扫描某些程序集(插件)并注册它们对公共内核的依赖关系。
外部库可能需要相同的依赖项。
例如,库 A 被扫描并注册其依赖项 D1。然后扫描库 B 并尝试再次针对内核注册相同的依赖项 - D1。如果我尝试两次注册相同的组件,Castle 显然会抱怨。
我的问题是:当您只想跳过已注册的组件时,您通常如何处理这种情况。IWindsorContainer 上是否有一些扩展方法可以执行此任务?
提前致谢。
您可以在您的注册声明中使用:
Component.For<Test>.OnlyNewServices()
或者一次注册多个组件时:
Types.FromAssemblyContaining<Test>().InSameNamespaceAs<Test>().Configure(c => c.OnlyNewServices());
或适合您的变体。有关条件注册,请参阅此链接:http: //docs.castleproject.org/Windsor.Conditional-component-registration.ashx
如果您确定所有依赖项(服务)将仅在这些插件程序集中,您可以继续并从每个插件注册每个服务(我假设您知道应该准确注册哪些类型,即您以某种方式标记它们)部件。您不必手动解决任何依赖关系,因为这将由容器本身处理,因此您不必担心排序或双重注册问题。