テスト中に自分だけにメールを送信するなど、本番環境と開発環境で異なる方法でメールを送信したいと考えています。電子メールを送信する前に、webconfig ファイルでアプリケーションの値を設定したり、URL を確認したりできることを知っています。これを行うためのベストプラクティスは何か、またはそれについて知らない他のオプションがあるかどうかを知りたいですか? このトピックに関する情報は大歓迎です。
5 に答える
私はプリプロセッサディレクティブ(C#)と呼ばれるものを使用しています。VBでは、ディレクティブのみと呼ばれます。
私はこのようなヘルパーメソッドを持っています:
public static bool IsDebug()
{
    #if DEBUG
        return true;
    #else
        return false;
    #endif
}
次に、コード内のどこからでもこのメソッドを呼び出して実行時に呼び出すことができ、コードが実行されているDebugか(開発)、Releaseバージョンであるか(本番)がわかります。
これは、(VB)の同等の#If ... Then ...#Elseディレクティブです。
まあ、何が本番で何が開発かを判断できるのはあなただけなので、web.config のフラグは問題ありませんが、より洗練されたソリューションには、依存性注入(DI) ala Spring.Net、StructureMap、Castle Windsorなどのパターンが含まれます。少し。
DI の背後にある重要な概念は、実行時にどのクラスをインスタンス化するかに関する情報を動的に提供することにより、実装のバリエーションを分離/分離することです。この場合、たとえば、すべてのコードは「メール」インターフェイスを処理するように記述され (それが製品環境か開発環境かはわからない)、DI フレームワークを構成して、アプリケーションの製品版または開発版のいずれかをインスタンス化します。メール実装クラス。構成パラメーター値を公開して増殖させていないという点で、少しクリーンです。
ただし、そこには確かに学習曲線があるため、プロジェクトのこの段階では実行できない可能性がありますが、心に留めておくべきことがあります.
コードを変更する代わりに、TO アドレス フィールドに関係なく、開発用メール サーバーを自分宛のメールのみに設定してみませんか?
それを行うためのコードを書くよりも優れているようです。
IIS のWeb 構成継承を使用して、アプリが展開先のそれぞれの環境からグローバル コンテキスト設定を「継承」できるようにすることができます。
.NET アプリがインストールされている場所の親ディレクトリ (例:/inetpub/wwwroot.web.configまたはルートの web.config ( \Windows\Microsoft.NET\Framework\ver\web.config)) に、環境固有の設定を追加します。例:
製品内
  <appSettings>
    <add key="sendMailTo" value="" />
    <add key="environmentName" value="PROD" />
  </appSettings>
開発中
  <appSettings>
    <add key="sendMailTo" value="me@mydomain.com" />
    <add key="environmentName" value="DEV" />
  </appSettings>
これらの環境コンテキスト設定は、アプリを再デプロイするたびにデプロイされるわけではありません。また、サーバーに展開する他のすべてのアプリもこれらの設定を継承できます。