2008-10-13 16 views

cevap

16

Yönlendirilen türleri somut bir örnek olarak, tek bir uygulaması tarafından uygulanan birden fazla hizmet için izin biz çeşit ağaç düğümleri ile çalışmak için iki arayüzleri olduğunu varsayalım:

public interface INodeAlterationProvider { ... } 
public interface IChildNodeListProvider { ... } 

Ve çeşitli bileşenler almak Bu arayüzlerden birine veya her ikisine bağımlılık. Sen NodeFactory iki örneğini kayıt olabilir

public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... } 

,: gibi Ancak bu arayüzler her uygulanmasında paylaşılan işlevsellik bir sürü onların olduğunu keşfetmek ve diğer bazı özellikleri ile birlikte tek bir sınıfa uygulamaları birleştirmek istediğini söylüyorsun orada özellikle eğer anlamak vb sert ve ayıklama yapabilir -

container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>()); 
container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>()); 

Ama bu potansiyel NodeFactory iki tekil örneklerini anlama var olabileceği - ideal değil, inşa etmek pahalıya geldiği, özellikle: her hizmet için bir uyguladıkları İkiden fazla arayüz uygulanmaktadır.

container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>()); 

Not: iletilen türleri aynı uygulamasına birden fazla hizmet iletmek için izin adım nerede

Bu, burada bunu yaparken bir örnek Burada gösterilen bileşen kayıt kodu gövdesinde yalnızca .

+0

Teşekkürler - ne olduğunu açıklıyor. Ancak, buna dayanarak, iki hizmeti birleştirmek için "uygun" bir refakatçi yapmamanın kısayolu gibi kokuyor ...? –

+1

de verdiğim örnekte bir koku olabilir, ben manşeti ... daha olası bir örnek ILoggerFactory uzanır ve her iki arabirimleri karşılayan tek sınıfı tarafından uygulanan bir IExtendedLoggerFactory gibi bir şey olabilir kapalı onunla geldi. – Bittercoder

+0

Ah; evet, bunu görebilirim. Aslında Mike Hadlow'un dün gece IoC/Windsor'daki konuşmasındaydım ve orada da bagajla ilgili bazı şeyler buldum :) –

İlgili konular