我有一个场景,我需要知道某个特定类型是否可以通过Windsor容器解决。皱纹是这种类型有依赖性。所以我有一个ProductRepository
类实现IRefDataRepository
和取决于IProductDataProvider
。我需要知道我是否可以成功地从容器中解析IRefDataRepository
。确定是否可以通过Castle Windsor容器解决某个给定类型
我试过使用IKernel.HasComponent(typeof(IRefDataRepository))
IKernel.GetAssignableHandlers(typeof(IRefDataRepository))
两者都返回ProductRepository
即使没有IProductDataProvider
注册。 (所以IWindsorContainer.Resolve(typeof(IRefDataRepository))
会抛出)
我目前的解决方案是写一个实际尝试解析类型的扩展方法(通过IWindsorContainer.Resolve(IRefDataRepository)
)捕获异常,如果类型解析返回true,否则返回false。但我想知道是否有更好的方法。
这适用于发布的场景,但如果我使用带参数的工厂方法,则不起作用。 handler.CurrentState是有效的,但仍然无法解析,因为工厂方法无法获取它所需的参数。 – 2010-03-10 20:24:37
我也会说所有这些代码都是ASP.NET MVC应用程序的设置端。我正在使用自定义控制器工厂,以便我可以使用Windsor来解决控制器依赖关系,并且我想知道哪些控制器会成功,哪些不会提前,因此我可以控制要注册的路由。我不想让控制器无法访问。 – 2010-03-10 20:26:49
你做错了。您应该测试以确保** all **您的控制器在您注册时已正确配置并可用。您想在代码中解决问题而不是解决问题。 – 2010-03-11 10:54:27