[英]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.