1

ウィンザーを使用して依存関係を解決し始めました。しかし私はController.Iで文字列の値を渡している間、エラーの下になっている同様のウィンザーポストのカップルをチェックしたが運がない。コンポーネントを作成することはできません。提供されなかったパラメータ

public class HomeController : Controller 
{ 
    public readonly String _A = string.Empty; 
    public HomeController(string A) 
    { 
     this._A = A;   
    } 
} 

インストーラ

public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(Classes.FromThisAssembly() 
      .BasedOn<IController>() 
      .LifestyleTransient()); 
    } 

WindsorControllerFactory

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 new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path)); 
      } 
      return (IController)kernel.Resolve(controllerType); 
     } 
    } 

私がクラス内に 'A' をラップし、それはそれぞれのインタフェースです解決する必要がありますか?

答えて

2

はい、それは依存関係を非常に明確にするので、望ましい解決策になります。

public class HomeControllerConfig 
{ 
    public string A { get; set; } 
} 

public class HomeController : Controller 
{ 
    public readonly String _A = string.Empty; 
    public HomeController(HomeControllerConfig config) 
    { 
     this._A = config.A;   
    } 
} 

インストーラ

それは Aは本当に、意味的にあなたのアプリケーションのために、しかし、要するに、ないものに依存し
public void Install(IWindsorContainer container, IConfigurationStore store) 
{ 
    ... 
    container.Register(Component.For<HomeControllerConfig>().Instance(new HomeControllerConfig { A = "..." })); 
} 
関連する問題