私のビジネス レイヤーはファイルを作成し、それらをApp_Data
asp.net mvc 4 Web フロントエンドのフォルダーに保存する必要があります。
ビジネス層で使用して、フォルダーServer.MapPath
の物理パスを取得できます。しかし、ビジネス層でのApp_Data
参照は避けたいです。System.Web
App_Data
ビジネス層へのパスを取得する他の方法はありますか?
私のビジネス レイヤーはファイルを作成し、それらをApp_Data
asp.net mvc 4 Web フロントエンドのフォルダーに保存する必要があります。
ビジネス層で使用して、フォルダーServer.MapPath
の物理パスを取得できます。しかし、ビジネス層でのApp_Data
参照は避けたいです。System.Web
App_Data
ビジネス層へのパスを取得する他の方法はありますか?
これに対処する正しい方法は、プレゼンテーション層からビジネス層へのパスを渡すことです。
別の言い方をすれば、ビジネス層を持つ目的は、UI とビジネス プロセスの間の関心を分離することです。ビジネス プロセスに ui レイヤーを強制的に認識させると、関心の分離に違反します。
これに対処する方法はいくつかあります。コンストラクターの初期化や依存性注入などを介して、ビジネス層が構築されるときに、ビジネス層にパスを渡すことができます。または、メソッド呼び出しに渡すこともできます。または、ビジネス層がロードする、パスを含む何らかの形式の構成ファイルを作成することもできます。
これについては、関心の分離に違反しない方法がたくさんあります。
私はそれが古い質問であることを知っていますが、それでも非常に有効な質問です。ここですべての回答を確認しました。すべての知識の中で最高のメモをここに書きたいと思います。
System.Web
アセンブリは SOLID の原則に反するため、使用しないことをお勧めします。たとえばSystem.Web
、Windows フォーム/コンソール/WPF アプリケーションでその DLL を使用して使用しようとすると、そのシナリオではコンテキストが常に null のままになります。 たとえばdata.txt
、フォルダーフォルダーの下のファイルにアクセスすることができApp_data
ます。DLL では、次のコードを使用する必要があります
string rootDirectoryPath = AppDomain.CurrentDomain.BaseDirectory;
string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", "data.txt");
パスとファイル名を引用符と「\」で手動で追加するのではなく、C# でPath.Combineメソッドを使用する必要があります(上記のコードを参照)。