Ninject'e oldukça yeni geldim, ancak bir özel sağlayıcı kullanarak DI için kullanmayı başarılı bir şekilde kullandım.Ninject, Providers and Activator.CreateInstance
kernel = new StandardKernel();
kernel.Bind<IPatientRecordLocator>().ToProvider<PatientRecordLocatorProvider>();
şöyle
bağlama başlatıldığını ve özel sağlayıcısı evet, ben vb hiçbir hata işleme olduğunu farkındayım (şimdiye
protected override IPatientRecordLocator CreateInstance(IContext context)
{
var name = ConfigurationManager.AppSettings["PatientRecordLocator"];
var typeName = name.Split(',')[0];
var assemblyName = name.Split(',')[1];
return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IPatientRecordLocator;
}
gibi Activator.CreateInstance diyoruz Yukarıdaki kodda :))
ve bunların hepsi bir çekicilik gibi çalışır.
Şimdi, karşı karşıya olduğum sorun, IPatientRecordLocator örneklerine enjekte etmek istediğim yeni bir sınıf tanıttığım zamandı. Aşağıdaki gibi bir kurucu eklediğimde sorun oluşur. Activator.CreateInstance I çalışması için bu sınıfların birinin
[Inject]
public MockPatientRecordLocator (IContactAdapter contactAdapter)
{
...
}
Sonra da Dolayısıyla yani sınıf MockPatientRecordLocator için
public MockPatientRecordLocator()
{
}
parametresiz yapıcı eklemek zorunda, sorum şu: nasıl Ninject yapabilirsiniz IContactAdapter'ı uygulayan bir sınıf örneğini ör. MockPatientRecordLocator? Yöntem enjeksiyonu denedim, ama boşuna.
Elde etmeye çalıştığım şeyin, bir tür PatientRecordSummary örneğinin bir MockPatientRecordLocator örneğiyle (yapıcı enjeksiyonu kullanarak) enjekte edildiği ve MockPatientRecordLocator'ın söz konusu örneğinin bir enjektörle enjekte edilmesi gerektiği bir tür zincirleme enjeksiyon olduğunu açıklamayı unuttum. IContactAdapter örneği (yine kurucu enjeksiyonu (eğer mümkünse)). Zincirin ilk kısmı işe yarıyor, ikincisi yok.
Merhaba Ruben, Yardımlarınız (ve iltifat) için teşekkürler. En iyisini yapmaya çalışıyorum :-) Bu özel kurulumda modülleri kullanmadım, ama bunları kullanmaya geçeceğim, böylece daha kolay Bind() kullanabilirim. – norgie