Я очень новичок в Autofac и до сих пор не понимаю весь потенциал.
Давайте возьмем пример, рассмотренный в кратком руководстве по автозапуску в документации сайта. (https://autofac.readthedocs.io/en/latest/getting-started/index.html)
using System;
namespace DemoApp
{
public interface IOutput
{
void Write(string content);
}
public class ConsoleOutput : IOutput
{
public void Write(string content)
{
Console.WriteLine(content);
}
}
public interface IDateWriter
{
void WriteDate();
}
public class TodayWriter : IDateWriter
{
private IOutput _output;
public TodayWriter(IOutput output)
{
this._output = output;
}
public void WriteDate()
{
this._output.Write(DateTime.Today.ToShortDateString());
}
}
}
А клей Autofac выглядит так:
using System;
using Autofac;
namespace DemoApp
{
public class Program
{
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()
{
// Create the scope, resolve your IDateWriter,
// use it, then dispose of the scope.
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
Цель этой программы - просто напечатать дату и время на консоли. Предположим теперь, что я хочу напечатать дату и время не только в консоли, но и в журналах. Для этой цели я хочу создать еще один класс с интерфейсом IOutput следующим образом:
public class LogsOutput : IOutput
{
public void Write(string content)
{
// write content to a log file here
}
}
Это чистый пример. Я хочу расширить этот пример для большей проблемы.
Теперь, как должен выглядеть код клея Autofac? чтобы код выполнял оба класса ConsoleOutput classe и LogsOutput и печатал выходные данные как в консоли, так и в файле журнала?
Можно ли этого добиться с помощью Autofac или это не в поведении autofac?
Я, возможно, хочу добавить сотни классов с интерфейсом IOutput. Как этого добиться с помощью Autofac?