Delfacık fabrika modelini Autofac ile anlamaya çalışıyorum. Burada güzel açıklanmıştır Anahtarlı() kayıt ile IIndex <> kullanarak fabrika nasıl uygulanacağı biliyorum: Configuring an Autofac delegate factory that's defined on an abstract classAutofac delege fabrikası func kullanarak <>
Ben Func <> kullanarak bir fabrika oluşturabilir olmadığını bilmek istiyorum, ve bunu nasıl yapacağınıaşağıdaki örnek için kayıt:
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.
}
}
Neden sadece kullanmayın '' Keyed() 'ile IIndex <>' '? Autofac bu sizin için 'Func' oluşturamaz. 'Keyed()' veya 'Named()' gibi bir şey kullanarak kapsayıcınıza kaydetmeniz gerekir: builder.Register > (c => s => c.ResolveKeyed (s)) Yetkili fabrikalar parametrelerle sadece bir tip oluşturabilir ve parametrelere dayalı bir tip seçemezler çünkü bu, 'IIndex <> 'için. –
nemesv
IIndex için <> Ben kaçınmaya çalıştığım Autofac kütüphanesine başvurmam gerekecek. DI kodumun sadece mümkün ise Kompozit root (ayrı kütüphane) olmasını istiyorum. –