繁体   English   中英

确定给定类型当前是否可以由Castle Windsor容器解析

[英]Determine if a given type can currently be resolved by a Castle Windsor container

我有一种情况,需要知道某个特定类型当前是否可以由Windsor容器解析。 皱纹是这种类型具有依赖性。 因此,我有一个ProductRepository类,该类实现IRefDataRepository并依赖于IProductDataProvider 我需要知道是否可以从容器中成功解析IRefDataRepository

我尝试使用IKernel.HasComponent(typeof(IRefDataRepository)) IKernel.GetAssignableHandlers(typeof(IRefDataRepository)) ,即使没有注册IProductDataProvider ,它们都返回ProductRepository (因此IWindsorContainer.Resolve(typeof(IRefDataRepository))将抛出)

我当前的解决方案是编写一个扩展方法,该方法实际尝试解析类型(通过IWindsorContainer.Resolve(IRefDataRepository) ),捕获异常,如果类型解析则返回true,否则返回false。 但是我想知道是否有更好的方法。

你这样做是错的。

您应该将程序分为两个明确的部分:

  • 设定
  • 实际代码

您可以在安装程序中注册内容,然后运行可以解析内容的实际代码。 如果无法解决,则说明您的设置代码中有错误。

代码的第二部分应该不了解容器,轮询容器是一种很大的代码异味。

话虽如此,当您出于某种原因绝对必须这样做时,请获取所需组件的处理程序,然后检查其状态( handler.CurrentState )。 如果Valid则可以安全解决您的组件。 相反不一定是正确的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM