Я пытаюсь понять шаблон фабрики делегатов с Autofac. Я знаю, как реализовать завод с использованием IIndex <> с шпоночным() регистрации, что объясняется хорошо здесь: Configuring an Autofac delegate factory that's defined on an abstract classФабрика делегатов Autofac, использующая func <>
Я хотел бы знать, если я могу создать завод, используя Func <>, и как бы я сделать регистрация для следующего образца:
public enum Service
{
Foo,
Bar
}
public interface FooService : IService
{
ServiceMethod();
}
public interface BarService : IService
{
ServiceMethod();
}
public class FooBarClient
{
private readonly IService service;
public FooBarClient(Func<Service, IService> service)
{
this.service = service(Service.Foo);
}
public void Process()
{
service.ServiceMethod(); // call the foo service.
}
}
Почему вы не просто использовать 'IIndex <>' с 'Keyed()'? Autofac не может создать этот 'Func' для вас. Вам необходимо зарегистрировать его в своем контейнере с помощью 'Keyed()' или 'Named()' что-то вроде: 'builder.Register > (c => s => c.ResolveKeyed (s)); 'Делегатные заводы могут создавать только один тип с параметрами и не выбирать тип, основанный на параметре, потому что это то, что является' IIndex <> 'for. –
nemesv
Для IIndex <> Мне нужно будет указать библиотеку Autofac, которую я пытаюсь избежать. Я хочу, чтобы мой код DI был в Composite root (отдельная библиотека) только по возможности. –