Próbuję zrozumieć wzór fabryki delegatów z Autofac. Wiem jak zaimplementować fabryki przy użyciu iIndex <> z Keyed() rejestracji, który jest wyjaśnione ładnie tu: Configuring an Autofac delegate factory that's defined on an abstract classAutofac delegate factory using func <>
Chciałabym wiedzieć, czy mogę utworzyć fabrykę przy użyciu Func <> i jak chciałbym zrobić rejestracje na poniższym przykładzie:
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.
}
}
Dlaczego nie można po prostu użyć 'IIndex <>' z 'Keyed()'? Autofac nie może utworzyć dla ciebie tej 'Func'. Musisz go zarejestrować w swoim kontenerze za pomocą 'Keyed()' lub 'Named()' coś takiego jak: 'builder.Rejestr > (c => s => c.ResolveKeyed (s)); 'Delegowane fabryki mogą tworzyć tylko jeden typ z parametrami i nie wybrać typu opartego na parametrze, ponieważ jest to dla niego" IIndex <> ". –
nemesv
Dla IIndex <> będę musiał odwołać się do biblioteki Autofac, której próbuję uniknąć. Chcę, aby mój kod DI był w Composite root (oddzielna biblioteka) tylko jeśli to możliwe. –