Ich versuche, das Delegierten Fabrikmuster mit Autofac zu verstehen. Ich weiß, wie Fabrik zur Umsetzung mit iIndex <> mit Keyed() Registrierung, die in hier schön erklärt: Configuring an Autofac delegate factory that's defined on an abstract classAutofac Delegat Fabrik mit Funk <>
Ich mag würde wissen, ob ich eine Fabrik mit Func erstellen <>, und wie würde ich das tun Anmeldungen für das folgende Beispiel:
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.
}
}
Warum gehst du nicht einfach verwenden 'IIndex <>' mit 'Keyed()'? Autofac kann diesen 'Func' nicht für Sie erstellen. Sie müssen es in Ihrem Container registrieren mit 'Keyed()' oder 'Named()' etwas wie: 'builder.Register > (c => s => c.ResolveKeyed (s)); 'Delegate Factories können nur einen Typ mit Parametern erstellen und keinen Typ basierend auf dem Parameter auswählen, da dies 'IIndex <>' für ist. –
nemesv
Für IIndex <> muss ich auf die Autofac-Bibliothek verweisen, die ich vermeiden möchte. Ich möchte, dass mein DI-Code nur dann in Composite Root (separate Bibliothek) ist, wenn es möglich ist. –