2016-08-22 2 views
0

オートファックのクイックスタートの例を拡張したいと思います。私がやりたいことは、ファイルに書きたいコンソールに書き込む代わりにやりたいことです。私はIOutputを実装する新しいクラスを作成し、ファイルに正しく書き出します。複数のオートファクトの自動化

public class FileOutput : IOutput 
{ 
    //public string FilePath { get; set; } 

    public void Write(string content) 
    { 
     using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"AutoFacLog.txt", true)) 
     { 
      file.WriteLine(content); 
     } 
    } 
} 

private static IContainer Container { get; set; } 
     static void Main(string[] args) 
     { 
      var builder = new ContainerBuilder(); 
      builder.RegisterType<ConsoleOutput>().As<IOutput>(); 
      builder.RegisterType<TodayWriter>().As<IDateWriter>(); 
      Container = builder.Build(); 

      WriteDate(); 
     } 

     public static void WriteDate() 
     { 
      using (var scope = Container.BeginLifetimeScope()) 
      { 
       var writer = scope.Resolve<IDateWriter>(); 
       writer.WriteDate(); 
      } 
     } 
public class TodayWriter : IDateWriter 
{ 
    private IOutput _output; 
    public TodayWriter(IOutput output) 
    { 
     this._output = output; 
    } 

    public void WriteDate() 
    { 
     this._output.Write(DateTime.Today.ToShortDateString()); 
    } 
} 

サンプルプログラムからこのDirectを呼び出さない例から、TodayWriterは自分のIOutput実装を呼び出すものです。 1つのコールでコンソールに出力し、別のコールでファイルに書き出す場合は、これを元に戻すにはどうすればよいですか?

答えて

0

IOutputインターフェイスを2つの異なるインターフェイス(IFileOutput,IConsoleOutput)に分割して、必要な場所で使用する必要があるようです。

もう1つの方法はを注入して、IOutputの両方の実装を提供し、それが望ましい場合は両方に書き込むことができます。

+0

だから、私はドキュメントにそのことを打ち明けたと思う。しかし、私はTodayWriterの2つの実装が必要でしょうか? 1つはIFileOutputを受け取り、もう1つはIConsoleOutputを受け取りますか?私はどこにそれらを使用しますか? –

+0

本当に依存しているのは、ある出力に書きたい場合や、別の出力に書きたい場合があるということです。 同じクラス内の異なる時刻にコンソール出力またはファイル出力に書き込む場合は、2つのインターフェイスに分割することができます.2つの出力のいずれかに常に書き込むことが必要な場合は、条件付きで登録できますあなたのコンテナをビルドするときの出力 – ivanPfeff

+0

私はTodayWriterのパラメータ注入をファイルからコンソールに変更する方法を悩んでいると思います。私は実際に直接コンソール出力を呼び出すことはありませんが、私はTodayWriterを通して呼び出すことになります。 –

関連する問題