2012-12-26 3 views
2

내 자신의 프로젝트를 만들었지 만 성을 사용하여 인터페이스의 구현을 시작하지 못했습니다! 아래에 표시된 ControllersInstaller, 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); 
    } 
} 



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






public class HomeController : Controller 
{ 
    public IMemberMapper _memberMapper; 

    public HomeController() 
    { 
    } 

    public HomeController(IMemberMapper memberMapper) 
    { 
     _memberMapper = memberMapper; 
    } 

    public ActionResult Index() 
    { 
     var model = _memberMapper.Map(); 
     return View(model); 
    } 
} 

// 글로벌 파일

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth(); 
    } 

    private static IWindsorContainer container; 

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

답변

0

당신이 ControllerFactory 현재로 WindsorControllerFactory 등록이 있나요?

이것은 일반적으로 Globals.asax.cs에서 수행됩니다. 수행하지 않은 경우 다음 예제를 참조하십시오. https://github.com/kkozmic/ToBeSeen/blob/master/src/ToBeSeen/Global.asax.cs

더 구체적으로는 BootstrapContainer() 메소드와 호출 위치를 살펴보십시오. 이것은 ASP.NET MVC가 새로 정의한 팩토리를 사용하여 필요할 수있는 컨트롤러를 생성하도록 시도합니다. 이 단계가 없으면 내장 컨트롤러 팩터 만 사용하고있는 것입니다.

+0

위의 코드 조각에 전역 파일을 추가했습니다. –

+0

같은 문제가 발생해도 ive가 BootstrapContainer() 메소드 호출을 application_start()에 추가했습니다. 어떤 아이디어? –

+0

@JamesRadford 이렇게 한 후에 응용 프로그램을 다시 시작 했습니까? 또한 약간의 로깅이 도움이됩니다 : 'WindsorControllerFactory'와 다른 관심 장소 (예 :'BootstrapContainer()')에 대한 호출을 기록하여 실제로 발생하는지 확인하십시오. – GolfWolf

0

IMemberMapper 서비스를 어딘가에 등록해야합니다. 이 목적을위한 또 다른 설치 프로그램 클래스가 가장 좋습니다.

관련 문제