0

私は C# クラス ライブラリ プロジェクトに取り組んでいます。このプロジェクトは、log4net.dll などの他の DLL ファイルを参照します。このプロジェクトには、log4net.dll を使用するクラスが 1 つだけあります。他のプロジェクトが自分のプロジェクトを参照している場合、他のプロジェクトが log4net.dll を使用するクラスを呼び出している場合にのみ、log4net.dll をその bin フォルダーにコピーします。

これは実現可能ですか?

4

1 に答える 1

0

ライブラリを 2 つに分割し、メイン ライブラリから log4net.dll の参照を削除し、log4net.dll を必要とする部分に関連付けられたものが必要な場合にのみ、2 番目のライブラリを参照します。

このようなケースを処理する良い方法は、依存性注入です - Enterprise Library (unity container) を見てください - しかし、それはあなたに1つの余分なdllを与えます:)

Unity コンテナーの使用:

Library1 には ILog4NetUsingInterface が含まれています。

Library2 には、クラス Log4NetUsingClass : ILog4NetUsingInterface があります。

Library2 には、Log4NetUsingClass を ILog4NetUsingInterface の実装として登録するブートストラップがあります。

public static class Bootstrapper {
    public static void Init() {
      ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
    }
}

この Init メソッドは、Log4NetUsingClass を使用する必要がある場合にのみ呼び出します

他のすべてのライブラリでは、呼び出すことができます

ServiceLocator.IoC.Retrieve<ILog4NetUsingInterface>()

(ブートストラップを呼び出さないと、実行時エラーが発生します。)

于 2013-06-20T14:48:42.910 に答える