自分のためのTips、誰かの為にもなるといいな・・・

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




最終更新 2007/09/23 18:40:43 - yohei
(2007/09/23 18:40:43 作成)


検索

最近気になる言葉
LINQ
atコマンド
最近更新したページ
2015/7/16
2008/9/15
2008/1/30
2007/12/14
2007/11/14
2007/10/25
2007/9/23
2007/5/30