2012-05-30 14 views
18

İstediğimi açıklamak için ekli resmi kullanıyorum.NInject: Get <T>()?

  • NInject tarafından yönetilen birkaç sınıfa sahibim. Bazılarının birkaç singleton örneği vardır ve diğerleri geçici kapsamdadır. Görüntüde mavi dikdörtgenler singltonlar, kırmızılar geçicidir. İşlemci diğer sınıflara veya örneklere bağlıdır.

  • Kernel.Get kullanarak her zaman İşlemci örneğini almak istiyorum. Ancak, her zaman, İşlemci tarafından kullanılan nesneler için farklı değerler kullanmak istiyorum. Görüntüdeki Eylem1 ve Eylem2'ye bakın. Kod gerçek değil, sadece açıklama içindir.

İhtiyaçları karşılayacak mevcut herhangi bir yol var mı? Pass parameters when Get

cevap

29

İşlemcinizin bu bağımlılıkları yapıcıda argüman olarak alması koşuluyla yapıcı argümanlarını iletebilmeniz gerekir.

var foo = new Ninject.Parameters.ConstructorArgument("foo", new Foo()); 
var bar = new Ninject.Parameters.ConstructorArgument("bar", new Bar()); 
var processor = kernel.Get<IProcessor>(foo, bar); 

public Processor (Foo foo, Bar bar){ 
    this.foo = foo; 
    this.bar = bar; 
} 
+1

Cevabınız için teşekkür ederiz. Ancak, sorumu yanlış anladığına inanıyorum. Bağlanma evresindeki bağları değiştirmekle ilgili değil, Çözümleme evresindeki parametreleri geçirmeyle ilgili değildir. Demek istediğim, bir IP-işlemci örneği almayı denediğimde, değerleri işlemcinin bağımlılıklarına nasıl aktaracağımdı: Foo ve Bar'ın örnekleri. İki eylemdeki nesne grafikleri aynıdır, ancak her bir örneğin özellikleri farklı değerlere sahip olacaktır. – Zach

+1

@Zach Üzgünüm Sorunuzu yanlış anladım. İlk cevabımı düzenledim. –

1

OnActivation() işlevini kullanın, bağımlılık etkinleştirildiğinde olayı çağırabilir.