有没有安全的方法来解析来自 Castle.Windsor 的组件?

Is there safe way to resolve component from Castle.Windsor?

我有 ControllerFactory 的实现来处理控制器中的构造函数注入,但是我想使用默认方式来解析控制器,以防其中一些控制器未注册:

public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IWindsorContainer _container;
    public WindsorControllerFactory(IWindsorContainer container)
    {
        _container = container;
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType != null)
        {
            try
            {
                return _container.Resolve(controllerType) as IController;
            }
            catch(Exception ex)
            {
                return base.GetControllerInstance(requestContext, controllerType);
            }
        }
        else
        {
            return base.GetControllerInstance(requestContext, controllerType);
        }
    }
}

有效,但我真的很想避免异常

使用container.Kernel.HasComponent(Type type):

bool isRegistered;
var container = new WindsorContainer();

isRegistered = container.Kernel.HasComponent(typeof(IFoo));
Console.WriteLine(isRegistered);

container.Register(Component.For<IFoo>().ImplementedBy<Foo>());
isRegistered = container.Kernel.HasComponent(typeof(IFoo));
Console.WriteLine(isRegistered);

这输出:

False
True