autofacc多个实现

本文关键字:实现 autofacc | 更新日期: 2023-09-27 18:03:38

我想对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());
    }
}

但是从示例中,示例程序没有直接调用这个,我的TodayWriter是调用我的IOutput实现的。如果我想在一个调用中输出到控制台,而在另一个调用中我想写入文件,那么我该如何来回切换呢?

autofacc多个实现

听起来您要么需要将IOutput接口分解为两个不同的接口(IFileOutput, IConsoleOutput),然后在您想要的地方使用它们。

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