C# Tips
クラスライブラリを動的に参照する
複数の環境(仕様)に合わせた調整が必要な場合、ソースコードをそのたびに書き換えたり、クラスを追加したりすると、アプリケーションのバージョン管理が複雑になっていきます。
そこで、実装が多様なところ、今後変更が予想されるところをクラスライブラリ(DLL)として本体から切り離しましょう。本体のリリース後に機能切替が必要なので、実行時にDLLを参照する必要があります。
また、そうする事で、第三者によるプラグイン開発の可能性も・・・
インターフェース用DLL(LibInterface.DLL)
ライブラリ開発者に配布
namespace MyNameSpace { public interface ILibTest { string msg(); } }
ライブラリの実装1(LibTestA.DLL)
上のDLLを参照する。namespace HisNameSpace { public class ClassA : MyNameSpace.ILibTest { public string msg() { return "Hello!"; } } }
ライブラリの実装2(LibTestB.DLL)
namespace HerNameSpace { public class ClassB : MyNameSpace.ILibTest { public string msg() { return "こんにちは!"; } } }
本体
インターフェースのDLL(LibInterface.DLL)のみ参照する。using System; using System.Reflection; class Program { static void say(string file, string class_name) { Assembly asm = Assembly.LoadFile(file); MyNameSpace.ILibTest t = (MyNameSpace.ILibTest)asm.CreateInstance(class_name); Console.WriteLine(t.msg()); } static void Main(string[] args) { say(@"D:\LibTestA.dll", "HisNameSpace.ClassA"); say(@"D:\LibTestB.dll", "HerNameSpace.ClassB"); } }実行結果
Hello! こんにちは!これで、DLLのファイル名と、クラス名が分かれば異なる実装を使い分けることが出来る。
名前を設定ファイルで持てば、実装の切替、機能追加等が出来るはず。