Çoğunlukla kompozit kalıbı uygulamaya koymam gerektiğini fark ettim. Örneğin:Autofac kompozit desen
interface IService { ... }
class Service1 : IService { ... }
class Service2 : IService { ... }
class CompositeService : IService
{
public CompositeService(IEnumerable<IService> services) { ... }
...
}
CompositeService'ı IService olarak kapsayıcı olarak kaydetmek ve bağımlılıkları enjekte etmek istiyorum.
(dekoratör biraz benzer görünüyor ama hizmet yerine sadece birinin set süsleyen)
AutoFac bunu yapmanın en iyi yolu nedir?
İdeal çözüm nasıl görünür (C# için)?
Güncelleme:
Benim şu anki kaydı:
builder.RegisterType<Service1>().Named<IService>("impl");
builder.RegisterType<Service2>().Named<IService>("impl");
builder.Register(c => new CompositeService(c.Resolve<IEnumerable<IService>>("impl")))
.As<IService>();
O http://nblumhardt.com/2011/01/decorator-support-in-autofac-2-4
Ele tarafından Dekoratörler benzer o geliştirilebilir mi?
Ayrıca basit durumlar için daha basit bir sürüm öneriyoruz: 'builder.RegisterCompositeType (" impl ")'. Ben sadece yapıcıyı aramaktan hoşlanmıyorum çünkü bağımlılıklar zaten enjekte edilebilir. –
@Konstantin Spirin: Bu aşırı yükü koymayı düşünmüştüm ama cevabımda neler olup bittiği konusunda açık olmak istedim. Değiştireceğim tek şey hala "WithElementsNamed" (ve ayrıca "WithElementsKeyed") yöntemlerini kullanacağım, bu yüzden çeşitli kayıt türleri için "RegisterComposite" ın aşırı yüklenmesini yapmak zorunda kalmayacağız. Diğer kayıt yöntemleri, adlandırılmış/anahtarlanmış tipler için geçerlidir. –