2016-05-04 4 views
1

У меня есть реализация ControllerFactory для обработки инъекции конструкторы в контроллерах, однако я хочу использовать путь по умолчанию для разрешения контроллеров в случае, если некоторые из них не зарегистрированы:Есть ли безопасный способ решения компонента из Castle.Windsor?

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); 
     } 
    } 
} 

Это работает, но я действительно хотел бы чтобы избежать исключения

+0

Почему некоторые контроллеры не будут зарегистрированы в вашем контейнере? – Steven

+0

Возможно, это неправильно, но я хочу зарегистрироваться в контейнерах только с параметризованными конструкторами, но не со всеми. – kagetoki

+0

И каково было бы это преимущество? – Steven

ответ

2

Используйте 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 

 Смежные вопросы

  • Нет связанных вопросов^_^