2016-05-04 5 views
1

ich meine Implementierung von Controller haben für in-Controller Konstruktor Injektion Handhabung, jedoch möchte ich Standardmethode verwenden Controller in Fall zu lösen, wenn einige von ihnen nicht registriert sind:Gibt es eine sichere Möglichkeit, eine Komponente von Castle.Windsor zu lösen?

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

Es funktioniert, aber ich würde wirklich gerne zu vermeiden Ausnahmen

+0

Warum sind einige Controller nicht in Ihrem Container registriert? – Steven

+0

Vielleicht ist es falsch, aber ich möchte in Container nur Controller mit parametrisierten Konstruktoren, nicht alle von ihnen registrieren. – kagetoki

+0

Und was wäre der Vorteil davon? – Steven

Antwort

2

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

Diese Ausgänge:

False 
True 
Verwandte Themen