2011-10-27 13 views
5

Beton tiplerini bağlamadan çıkarmak için bir yol var mı? Uygulamaları gerçeklemek istemiyorum, sadece türü al.Tüm somut tipler aşağıdaki formülden alın:

Bu

Type[] concreteTypes = Kernel.GetBindings(typeof(IController)). 
    GetImplementingTypes(); 

Benim Kernel böyle bir şey yapmak için ne istiyorum sadece StandardKernel olduğunu.

Sonunda bu türlere karşı yansıtmak istiyorum.

cevap

4

Tek yolu, tüm örnekleri kernel.GetAll<IController>() kullanarak elde etmektir. Ninject, bir dizi ciltleme eşlemesi içermiyor. Uygulama, enjeksiyonlar yoluyla çözüldüğünde veya çağrı alındığında belirlenir. Bunun nedeni, Ninject'in koşullu ve örtülü bağlamaları sağlamasıdır.

Bir MVC3 uygulaması kurarsanız, hangi denetleyicinin yükleneceğini ve ne enjekte edileceğini belirleyeceği için denetleyicilerinizi gerçekten kaydetmezsiniz. Bu, gizli bir bağlayıcı bağ oluşturarak bunu yapar.

Gelebilecek en yakın nokta StandardKernel ürününü genişletmek ve korunan cilt kümesine erişmek ve koşullu olmayan tüm bağlamaları bulmaktır. Şartlı olmayan tüm bağlamaları aldığınızda, ciltlemeyi ayırabilirsiniz, ancak tam olarak StandardProvider sınıfının arkasına gizlenmiş olabileceklerini hatırlayamıyorum.

Belirli bir arabirim için kesin ciltleme yapılandırmasını bilmeniz gereken şeyi ne yapıyorsunuz?

+0

Bunun sonsuza kadar sürdüğünün farkındayım, ama buna ihtiyacım olan tek bir yer var: Ben, WCF için bir Ninject tabanlı ServiceHost yapıyorum. ServiceHost yapıcısını, servis arayüzünü değil, somut hizmet uygulamasının tipini beslemem gerekiyor. –