2011-07-02 2 views
1

안녕,클래스 내부에서 웹 사이트 루트의 물리적 특성을 확인 하시겠습니까?

나는 나의 MVC의 웹 어플리케이션에 mailhandler 클래스를 가지고 있고 mailTemplate 파일에 실제 경로 (루트 아래 폴더의 몇 가지)을 얻을 필요가있다. 어떻게해야합니까? 어떤 종류의 httpContext를 보내야합니까?

public static EmailHandler Instance 
{ 
    get { 
     if (EmailHandler._emailHandler == null) 
      EmailHandler._emailHandler = new EmailHandler(); 
     return EmailHandler._emailHandler; } 
    set { EmailHandler._emailHandler = value; } 
} 

어떤 생각 : 내 mailHandler 매개 변수에 대한 생성자가없는 있도록 singelton입니까?

+0

정적 공용 클래스는 루트를 저장하기에 나쁜 장소입니까? 이것은 Global.asax (Application_Start) – Banshee

답변

1

개인적으로, 나는 그것을 사용하는 기본 경로라고 말할 것입니다. 동일한 코드는 웹뿐만 아니라 여러 환경에서 작동 할 수 있습니다. 웹 바인딩 된 경우 HttpContext.Current가 도움이 될 수 있습니다. 에 전달하려면 대신 추상화 된 HttpContextBase, ala MVC를 전달해야합니다.

그러나 기본 경로의 문자열을 전달하는 것은

+0

에서 설정할 수 있습니다. 몇 가지 예를 들려주세요. – Banshee

+0

@SnowJim 무엇? 문자열 매개 변수? ', string basePath' ...? –

+0

죄송합니다. 이제 알겠습니다. 고맙지 만 루트 매개 변수를 전역 매개 변수에 저장하지 않는 이유는 무엇입니까? – Banshee

1
  • 당신이 설정 파일에 기본 폴더의 실제 주소를 저장할 수 있습니다 :) 많은 쉽습니다. 그런 다음 Path.Combine (baseFolder, templatefile)을 실행하여 전체 경로를 가져옵니다. 이는 httpcontext에 액세스 할 수 있는지 여부에 의존하지 않으므로 선호되는 방법입니다.
  • 당신은
+0

웹 페이지가 웹 호스트에있는 경우 앱의 루트 경로를 알 수 없습니다. – Banshee

1

당신은 항상 추상적 인 응용 프로그램 구성 :

public interface IApplicationConfiguration 
{ 
    string EMailTemplateFolder { get; } 
} 

그런 다음 인스턴스에 전달할 수 IIS에서 가상 폴더로 해당 폴더를 매핑하고는 Server.MapPath 기능을 사용하여 실제 경로를 얻을 수 있습니다 관련 인터페이스에이 인터페이스를 구현하는 클래스의

YourClassEMailHandlerContainer.Instance 
    .InitializeWith(new ApplicationConfiguration()) 

ApplicationConfiguration : IApplicationConfiguration : 당신의 EMailHandler에 인스턴스에 전달하는 또 다른 방법입니다.

이 후 방금 메서드를 호출합니다. 의미가

var templateFile = 
    Path.Combine(applicationConfiguration.EMailTemplateFolder, name); 

희망 : 내부적으로

YourClassEMailHandlerContainer.Instance.ParseTemplate(name) 

.

관련 문제