2010-03-01 6 views
1

구조판을 asp mvc 사이트에서 사용하고 있는데, 처음 II6에 배치하려고했습니다.asp mvc 2 배포 할 때 구조적 맵이 작동하지 않습니다.

기본 의존 구조는 매우 일반적입니다 :

public ControlMController(IControlMService controlMservice) 
    { 
     this._controlMservice = controlMservice; 
    } 

    ... 

    public ControlMService(IControlMRepository repo) 
    { 
     this._repo = repo; 
    } 

    ... 

    public SQLControlMRepository (CTRLMDataContext dataContext) 
    { 
     _db = dataContext; 
    } 

내 structureMap 레지스트리는이

 For<IControlMService>().Use<ControlMService>(); 
     For<IControlMRepository>().Use<SQLControlMRepository>(); 
     //For<IControlMRepository>().Use<TestControlMRepository>(); 
     SelectConstructor<CTRLMDataContext>(() => new CTRLMDataContext()); 
     For<CTRLMDataContext>().LifecycleIs(new HybridLifecycle()).Use<CTRLMDataContext>(); 

내 컨트롤러 공장처럼은 다음과 같습니다

public class ControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     try 
     { 
      if (controllerType == null) return base.GetControllerInstance(requestContext,controllerType); 
      return ObjectFactory.GetInstance(controllerType) as IController; 
     } 
     catch 
     { 
      System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
      return null; 
     } 
    } 
} 

이 100 % 작동 개발 서버에 있지만 IIS 6 서버에 배포 할 때 작동하지 않습니다.

dependenies 모두 다음과 같은 예외를 반환 갖는다 ControlMController :

[InvalidOperationException: The IControllerFactory 'SupportTool.web.Controllers.ControllerFactory' did not return a controller for the name 'ControlM'.] 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +304 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54 
    System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

0 의존성이 서버에서 잘 작동 가지고있는 다른 모든 컨트롤러, 그래서 structuremap의 설치가 조금 작업해야합니다 , 단지 전체 :/

답변

3

자기 답장!

문제는 데이터베이스 도메인 이름이 정규화되지 않았기 때문에 내 datacontext의 생성자가 던져 버렸고 내 PC가 서버를 해결했지만 서버가이를 만들 수 없었기 때문입니다.

정보가 포함 된 내부 예외가 오류 페이지에 표시되지 않았습니다!

:

+0

유형의 ctor에 의해 발생 된 예외는 StructureMap 예외 내에서 내부 예외로 반영되어야합니다. 내부 예외를 검색하는 것은 고통 스러울 수 있지만 StructureMap은 발생하는 문제에 대한 컨텍스트와 관련하여 매우 훌륭한 업무를 수행한다는 것을 알고 있습니다. 당신은 일반적으로 귀하의 ctors에 너무 많은 논리가 필요하지 않습니다. 사람들은 유형의 요소와 관련이 없지만 추상화를위한 구성이 필요한 SM과 같은 것들과 관련된 경우가 종종 있습니다. – KevM

+0

@KevM, 기본 예외가 내부 예외를 표시하지 않기 때문에 전체 예외 세부 사항을 얻으려면 NLog 또는 log4net을 설치해야합니다. 혹시 내부 예외를 표시하는 쉬운 수정 방법을 알고 있습니까? –

+0

발생한 문제에 대한 예외 출력을 보지 않고 어떻게 도와야하는지 잘 모르겠습니다. 내 StructureMap 구성의 문제점을 파악하기 위해 로깅 프레임 워크를 사용하지 않습니다. 나는 종종 문제를 이해하는데 크게 도움이되는 테스트를 작성한다. – KevM

관련 문제