2013-06-04 22 views
39

Herkesin enjekte etmesi gereken her zaman bu örneği kullanması için Ninject ile önceden oluşturulmuş bir sınıf örneğini kaydedip kaydedemeyeceğimi söyleyebilir miyim?Ninject: Önceden oluşturulmuş bir örneği Ninject ile kaydetme?

Sanırım tek bir çağırabilirsiniz, ancak önceden oluşturulmuş örneğim var. Tüm belgeler bir sınıfın yeni örneklerini oluşturmaya işaret ediyor.

+0

.InSingletonScope() ile kombine kullanabilirsiniz daha karmaşık bir şey isterseniz konum budur sonra. Tek bir örnek oluşturur ve onu ihtiyacı olan her şeye yumruklar, çünkü bu şekilde yuvarlanır. –

+3

Teşekkürler, ama InSingleScope örneğini oluşturur, ben zaten örneğim var, epeyce özelliklerle başlatılmış .... bu yüzden belirli bir örneği kaydetmem gerekiyor ... Bir örneğiniz var mı? – Martin

+0

Unutmayın, bir bağımlılık grafiği oluşturmalısınız, herhangi bir nesneyi yenilememelisiniz, kapsayıcı, uygulamanızın çalışmasından önce bunları bilmelidir, bu yüzden nesneleri yeniden düzenliyorsanız ve bir şekilde bunları bir şekilde referanslamak istiyorsanız Uygulamanızın diğer alanı, her yerde Çekirdek'ten örnekler alacağınız Service Locator gibi bir tür anti-pattern gibi görünüyor. Eğer bir şeyi yanlış anlamadığım sürece, üzgünüm :) –

cevap

57

Zaten varolan bir örneği alan ve onu tekil olarak kaydeden ToConstant yöntemini kullanabilirsiniz.

var kernel = new StandardKernel(); 
kernel.Bind<MyClass>().ToConstant(myClassInstance); 

Eğer (size örneğini almak için bir Func nereye) ToMethodInSingletonScope

var kernel = new StandardKernel(); 
kernel.Bind<MyClass>().ToMethod(context => myClassInstance).InSingletonScope(); 
+1

Güzel, hangi durumlarda, bazı NinjectModule'de henüz oluşturulmamış bir örneği bağlayacaksınız? Başvuruların başında herhangi bir nedenden dolayı bağlantı yapılamadığı ve başka bir yere hile yapılmasını gerektirmediği sürece bana biraz garip geliyor. Asla kullanılmaz .ToConstant, zorlu durumlar için yararlı gibi görünüyor :) –

+0

Merhaba patrick, bir üçüncü parti bileşeni tarafından uygulamanın başlangıcı bana verilen bir nesnenin bir örneğim var, bu örnek özellikleri ile doldurulur Bu nesne ya da bir tekil bir modül olsaydı, bir tekil bir modül vardı, tüm doğru özelliklere sahip olmazdım. Ama tavsiyeye açıkım. Şu anda benim neslimde nemesv'e göre örnek olmaktan çok, kayıt yaptırmak için kullandığım bir ninject modülünün kurucusuna geçiyorum. – Martin

+2

Bu, Martin size zaten sizin instanced nesneden nasıl geçeceğine dair iyi bir örnek verdiğinden sorununuzu çözmelidir :) –