2011-07-02 7 views
1

こんにちは、クラス内からウェブサイトのルートを物理的に取得しますか?

私は私のMVC webアプリケーションでmailhandlerクラスを持っているとmailTemplateファイル(ルートダウンフォルダのカップル)への物理パスを取得する必要があります。これはどうすればいいですか?何らかのhttpContextを送信する必要がありますか?私のmailHandlerはシングルトンなので、パラメータのコンストラクタはありません:

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

ご存知ですか?

+0

静的なパブリッククラスは、ルートを格納するのに悪い場所ですか?これはGlobal.asax(Application_Start) – Banshee

答えて

1

個人的には、使用するベースパスを教えてください。 Webだけでなく、複数の環境で同じコードを使用できます。 Webバインドされている場合は、HttpContext.Currentが役に立ちます。 に渡す場合は、抽象化されたHttpContextBase、ala MVCを渡します。

しかし、多くの方が簡単です:)

+0

で設定することができます。 – Banshee

+0

@SnowJimは何ですか?文字列パラメータ? '、string basePath' ...? –

+0

申し訳ありません、今すぐ取得します。ありがとうございますが、ルートパスをグローバルパラメータに格納しないでください。 – Banshee

1
  • あなたが設定ファイルに、ベースフォルダの物理アドレスを格納することができ、ベースパスの文字列を渡します。次に、Path.Combine(baseFolder、templatefile)を実行して完全なパスを取得します。これは、httpcontextにアクセス可能であることに依存しないので、好ましい方法です。あなたがIISで仮想フォルダとしてそのフォルダをマッピングして、Server.MapPathの機能
+0

ウェブページがウェブホスト上にある場合、私はアプリのルートパスを知らないでしょう。 – Banshee

1

を使用して物理パスを取得することができます

  • あなたはいつもアプリケーション構成:)

    public interface IApplicationConfiguration 
    { 
        string EMailTemplateFolder { get; } 
    } 
    

    抽象次にインスタンスに渡すことができますこのインタフェースを実装するクラスの関連するメソッド

    YourClassEMailHandlerContainer.Instance 
        .InitializeWith(new ApplicationConfiguration()) 
    

    ApplicationConfiguration : IApplicationConfiguration:あなたのEMailHandlerにインスタンスを渡すと、別のオプションです。

    この後、メソッドを呼び出すだけです。理にかなって

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

    希望:内部

    YourClassEMailHandlerContainer.Instance.ParseTemplate(name) 
    

  • 関連する問題