我想知道是否有一些最佳实践来实现我需要的功能。
我有一个Web应用程序,在启动期间,通过反射,扫描某些程序集(插件)并将其依赖项注册到公共内核。
外部库可能需要相同的依赖项。
例如,库A被扫描并且其依赖性D1被注册。然后扫描库B并尝试再次针对内核注册相同的依赖项 - D1。 如果我尝试两次注册相同的组件,Castle显然会抱怨。
我的问题是:当您只想跳过已注册的组件时,通常如何处理该方案。在执行此任务的IWindsorContainer上是否有一些扩展方法?
提前致谢。
答案 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)
如果您确定所有依赖项(服务)都只在那些插件程序集中,您可以继续注册每个服务(我假设您知道哪些类型应该完全注册,即您以某种方式标记它们)来自每个插件程序集。您不必手动解决任何依赖项,因为这将由容器本身处理,因此您不必担心订购或双重注册问题。