0

私は2つのプロジェクトを持っています

  1. アプリ(WindosFormsはコンポーネントを起動するためのUIとしてのみ使用されます)

  2. コンポーネント

コンポーネントには、StructureMap(レジストリ)を介して挿入するすべてのインターフェイスとデフォルトの実装があります。このプロジェクトでは、すべてのクラス(Log2Cnsole)のロギングとデフォルトの実装のためのインターフェースを紹介し、StructureMapに登録します。

私が必要としているのは、誰かが自分のUIアプリを使用してデフォルトのアプリを削除したい場合、コンポーネントDLLのユーザーがデフォルトのLog2Consoleを彼でオーバーライドできるようにすることです。プロジェクトを所有し、StructureMapを介して登録します)。

英語が下手でごめんなさい。

4

1 に答える 1

0

これを行う方法は、特定の実装を持つ別のコンストラクターを呼び出すデフォルトのコンストラクターを提供することです。

public interface ILogger
{
   void Log(string text);
}

public class ConsoleLogger
{
   public void Log(string text) { Console.WriteLine(text); }
}

public class TraceWriter
{
   private ILogger log;

   // Default behaviour
   public TraceWriter () : 
     this(new ConsoleLogger()) { }

   // User specified implementation
   public TraceWriter ( ILogger logger )
   {
      this.log = logger;
   }
}
于 2012-12-17T22:18:07.680 に答える