Autofac多个实现

时间:2016-08-22 14:25:03

标签: c# autofac

我想扩展Autofac的快速启动示例。我想要做的不是写入我想要写入文件的控制台。我创建了一个实现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());
    }
}

但是从示例中,Sample程序不会直接调用我的TodayWriter,而是调用我的IOutput实现。如果我要将一个调用输出到控制台而另一个调用我要写入文件,我该如何将其重新打开呢?

1 个答案:

答案 0 :(得分:0)

听起来你需要将IOutput接口拆分为两个不同的接口(IFileOutputIConsoleOutput),然后使用你想要的接口。

另一个选择是注入一个IEnumerable<IOutput>,它将为你提供IOutput的两种实现,然后如果需要的话,你可以写两个。