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のファイル名と、クラス名が分かれば異なる実装を使い分けることが出来る。
名前を設定ファイルで持てば、実装の切替、機能追加等が出来るはず。
