2011-09-17 6 views
0

を配線するので、私は城ウィンザーのためのasp.net MVCのチュートリアルを行って、私の登録は次のようになります。どのようにコントローラの依存

public class HomeController : Controller 
{ 
    private IUserService _userService; 

    public HomeController(IUserService userService) 
    { 
     this._userService = userService; 
    } 
} 

private static IWindsorContainer _container = new WindsorContainer(); 
    private static void BootstrapContainer() 
    { 
     _container = new WindsorContainer() 
      .Install(FromAssembly.This()); 
     var controllerFactory = new WindsorControllerFactory(_container.Kernel); 
     ControllerBuilder.Current.SetControllerFactory(controllerFactory); 
    } 
    protected void Application_End() 
    { 
     _container.Dispose(); 
    } 

だから私のにHomeControllerに私はこれを持っています

IUserServiceをセットアップするためにこのコントローラーを配線する方法を教えてください。私は物事を配線する必要があるか問題で場合

更新 、私のvs.netのプロジェクトは、以下のとおりです。

web, interfaces, entities, data (nhibernate), services 

答えて

2

WindsorControllerFactoryの実装はDOCO http://docs.castleproject.org/Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx?HL=ikernelから、次のようになります。

public class WindsorControllerFactory : DefaultControllerFactory 
{ 
    private readonly IKernel kernel; 

    public WindsorControllerFactory(IKernel kernel) 
    { 
     this.kernel = kernel; 
    } 

    public override void ReleaseController(IController controller) 
    { 
     kernel.ReleaseComponent(controller); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     if (controllerType == null) 
     { 
      // Throw exception. Can't resolve null type. 
     } 

     return (IController)kernel.Resolve(controllerType); 
    } 
} 

を登録する依存性の注入の必要性によって解決される必要が

各インタフェースを更新しました。

これは、コンテナの.Registerメソッドを呼び出すことで実行できます。ここ

container.Register(Component.For<IUserService>().ImplementedBy<UserService>().LifeStyle.Transient); 

さらに詳しい情報:http://docs.castleproject.org/Windsor.Registering-components-one-by-one.ashx

+0

私はすべてのサービスをautowireすることを望んで、その後、コントローラのすべてのコンポーネントをautowireました。どうやってやるの? – Blankman

+0

@Blankmanこれを行うには、実装なしでIServiceのようなマーカーインターフェイスを作成し、そこからIUserServiceを継承する必要があります。次に、container.Register(Classes.FromThisAssembly()。BasedOn ().WithService.FromInterface())を呼び出します。これにより、すべてのIServicesが登録されます。あるいは、インストーラクラスをビルドする必要があります。 http://docs.castleproject.org/Windsor.Installers.ashxおよびhttp://docs.castleproject.org/Windsor.Registering-components-by-conventions.ashx。私は確かに生涯が多分扱われる必要があるので、1つのコールから何も登録しません。 –

関連する問題