我想扩展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实现。如果我要将一个调用输出到控制台而另一个调用我要写入文件,我该怎样才能将其重新打开?
听起来你需要将IOutput
接口拆分为两个不同的接口(IFileOutput
,IConsoleOutput
),然后使用你想要的那些接口。
另一个选择是注入一个IEnumerable<IOutput>
,它将为你提供IOutput
的两种实现,然后你可以写两个,如果这是可取的。