1

我刚开始使用Windsor来解决依赖关系。但我在Controller中传递字符串值时出现错误。我检查了几个类似的Windsor Post,但没有运气。无法创建组件,因为它具有要满足的依赖关系。未提供的参数

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

安装

public void Install(IWindsorContainer container, IConfigurationStore store) 
{ 
    ... 
    container.Register(Component.For<HomeControllerConfig>().Instance(new HomeControllerConfig { A = "..." })); 
} 
相关问题