2016-05-04 14 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); 
     } 
    } 
} 

が、私は本当に好きです

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

この出力:例外

+0

一部のコントローラがコンテナに登録されないのはなぜですか? – Steven

+0

それは間違っているかもしれませんが、コンテナのみのコントローラに、パラメータ化されたコンストラクタを登録する必要があります。 – kagetoki

+0

これの利点は何でしょうか? – Steven

答えて

2

使用container.Kernel.HasComponent(Type type)を避けるために

False 
True 
関連する問題