Получить физический корень сайта изнутри класса? - PullRequest
1 голос
/ 02 июля 2011

Привет,

У меня есть класс mailhandler в моем веб-приложении MVC, и мне нужно получить физический путь к файлу mailTemplate (пару папок в корневом каталоге).Как мне это сделать?Должен ли я отправить какой-то httpContext?Мой mailHandler - это сингелтон, поэтому нет конструктора для параметров:

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 02 июля 2011
  • Вы можете сохранить физический адрес базовой папки в конфигурационном файле. Затем выполните Path.Combine (baseFolder, templatefile), чтобы получить полный путь. Это предпочтительный способ, поскольку он не зависит от доступности httpcontext.
  • вы можете сопоставить эту папку как виртуальную папку в IIS, а затем получить физический путь, используя функцию Server.MapPath
1 голос
/ 02 июля 2011

Вы всегда можете абстрагировать конфигурацию вашего приложения:)

public interface IApplicationConfiguration
{
    string EMailTemplateFolder { get; }
}

Затем передать экземпляр класса, реализующего этот интерфейс, в соответствующий метод.Передача экземпляра вашему EMailHandler - это еще один вариант:

YourClassEMailHandlerContainer.Instance
    .InitializeWith(new ApplicationConfiguration())

Где ApplicationConfiguration : IApplicationConfiguration.

После этого вы просто вызываете свой метод.

YourClassEMailHandlerContainer.Instance.ParseTemplate(name)

Где внутренне:

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

Надеюсь, что это имеет смысл.

1 голос
/ 02 июля 2011

Лично я бы просто сказал ему базовый путь для использования; тогда один и тот же код может работать в разных средах, а не только в сети. Если вы подключены к Интернету, HttpContext.Current может помочь. Если вы хотите передать его в , я бы вместо этого передал абстрактную HttpContextBase, аля MVC.

Но передача строки base-path намного проще:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...