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

时间:2010-03-10 16:25:07

标签: c# castle-windsor

我有一个场景,我需要知道Windsor容器当前是否可以解析特定类型。皱纹是这种类型有依赖性。所以我有一个ProductRepository类来实现IRefDataRepository并依赖于IProductDataProvider。我需要知道我是否可以从容器中成功解析IRefDataRepository

我尝试使用IKernel.HasComponent(typeof(IRefDataRepository)) IKernel.GetAssignableHandlers(typeof(IRefDataRepository)),即使没有注册ProductRepository,也会返回IProductDataProvider。 (所以IWindsorContainer.Resolve(typeof(IRefDataRepository))会抛出)

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

1 个答案:

答案 0 :(得分:1)

你做错了。

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

  • 设置
  • 实际代码

您在设置中注册内容,然后运行可以解决问题的实际代码。如果您无法解决,则您的设置代码中存在错误。

代码的第二部分应该不知道容器,并且轮询容器是一个很大的代码味道。

现在,已经说过了,当你出于某种原因必须完成它时,获得你需要的组件的处理程序,并检查它的状态(handler.CurrentState)。如果Valid您的组件可以安全解决。 虽然对面不一定是真的!