我有一个场景,我需要知道Windsor容器当前是否可以解析特定类型。皱纹是这种类型有依赖性。所以我有一个ProductRepository
类来实现IRefDataRepository
并依赖于IProductDataProvider
。我需要知道我是否可以从容器中成功解析IRefDataRepository
。
我尝试使用IKernel.HasComponent(typeof(IRefDataRepository))
IKernel.GetAssignableHandlers(typeof(IRefDataRepository))
,即使没有注册ProductRepository
,也会返回IProductDataProvider
。 (所以IWindsorContainer.Resolve(typeof(IRefDataRepository))
会抛出)
我目前的解决方案是编写一个实际尝试解析类型的扩展方法(通过IWindsorContainer.Resolve(IRefDataRepository)
),捕获异常,如果类型解析则返回true,否则返回false。但我想知道是否有更好的方法。
答案 0 :(得分:1)
你做错了。
您应该将程序划分为两个明确的部分:
您在设置中注册内容,然后运行可以解决问题的实际代码。如果您无法解决,则您的设置代码中存在错误。
代码的第二部分应该不知道容器,并且轮询容器是一个很大的代码味道。
现在,已经说过了,当你出于某种原因必须完成它时,获得你需要的组件的处理程序,并检查它的状态(handler.CurrentState
)。如果Valid
您的组件可以安全解决。 虽然对面不一定是真的!