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实现的。如果我想在一个调用中输出到控制台,而在另一个调用中我想写入文件,那么我该如何来回切换呢?
听起来您要么需要将IOutput
接口分解为两个不同的接口(IFileOutput
, IConsoleOutput
),然后在您想要的地方使用它们。
另一种选择是注入IEnumerable<IOutput>
,它将为您提供IOutput
的两个实现,然后您可以写入两个,如果这是可取的。