2012-01-31 9 views
6

İlk önce, public class DatabaseFactory : Disposable, IDatabaseFactory olarak tanımlanmış bir dbcontext fabrikam var ve zaten mevcut değilse bir bağlam yaratıyor.Tek bir fabrika örneğini birden fazla depoya nasıl işleyebilir ve nasıl kullanılır?

Sonraki, fabrikada yapıcıyı alan public class Repository<T> : IRepository<T> where T : class tanımlanmış genel bir depo var. Bundan devraldığım başka beton depolarım var.

Ayrıca, fabrikayı yapıcıya alan ve tüm değişiklikleri (tüm havuzların kullanması gereken) fabrika içindeki içeriğe kaydeden public class UnitOfWork : IUnitOfWork tanımlanmış bir birim iş birimim var.

Denetleyicimde, yapıcı public ProjectController(IDatabaseFactory factory, IUnitOfWork unitOfWork, IProjectRepository projectRep, IUserRepository userRep) olarak ayarlanmış.

Temel olarak, iş birimine ve tüm depolara geçirilecek aynı fabrika örneğine ihtiyacım var. Ninject ile, tek bir örneği hepsine iletmek yerine her nesne için yeni bir fabrika oluşturur. Tek örneğe yalnızca birimin atlatılmasına izin vermenin bir yolu var mı, yoksa fabrikamı doğru bir şekilde oluşturmuyorum ve/veya doğru bir şekilde doğruyu anlamadım mı? İşte

Ninject benim bağlamaları şunlardır: varsayılan olarak Ninject Transient kapsamını kullanması nedeniyle

kernel.Bind<IProjectRepository>().To<ProjectRepository>(); 
kernel.Bind<IIssueRepository>().To<IssueRepository>(); 
kernel.Bind<IUserRepository>().To<UserRepository>(); 
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>(); 
kernel.Bind<IUnitOfWork>().To<UnitOfWork>(); 

cevap

10

bu gerçekleşir - Yeni bir örneğe bir tür istenen her zaman oluşturur.

diğer bilgiler: Eğer uygulama boyunca bir tür belirli bir örneğiyle gerçek kullanıma bağlı olarak kapsamını belirtmelidirhttps://github.com/ninject/ninject/wiki/Object-Scopes

:

Örnek aşağıdaki gibi görünebilir:

kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InSingletonScope(); 
kernel.Bind<IUserRepository>().To<UserRepository>().InRequestScope(); 
+0

Gerçekten mi? Bu cevabı bir buçuk saat aramaya çalıştım. Tam olarak aradığım şey bu. Bu cevabı google yoluyla bulmak neden bu kadar zor olduğu hakkında hiçbir fikrim yok. Belki de ondan çok daha zorlaşmaya çalışıyordum. Tekrar teşekkürler! – snoluet

+0

Eğer benim yazı yararlı bulduysanız bir cevap olarak kabul edebilirsiniz :) – MonkeyCoder

+0

Ben - çok hızlı bir şekilde yanıtladı ve şimdi 4 dakika beklemek zorunda :) Teşekkür ederim. Bir saniyeniz varsa hızlı soru, eğer fabrikayı singleton olarak koyarsam - sadece tek bir örnek uygulama oluşturacak mı yoksa sadece mevcut kontrol cihazında mı olacak? IssueController için fabrikanın farklı bir örneğini ProjectController'den (ancak bu özel denetleyicinin içindeki tek bir örneği) kullanmak isterse, bunu benim için halleder mi? – snoluet