yoktur. Başlaman gerek.
İlk bakışta aradığınız şey container
. Bu basit bir WinForms app gibi ContainerBuilder
onu kurmak:
static void Main()
{
using (var container = builder.Build())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var mainForm = container.Resolve<MainForm>();
Application.Run(mainForm)
}
}
genel bir fikir sadece ilk veya en üstteki örneği çözmek zorunda olmasıdır. Kapsayıcı, yapıcı parametrelerini kullanarak bağımlılık enjeksiyonuna dayalı olarak tüm diğer örnekleri oluşturmayı ele alacaktır.
Eğer DI kalıbı uygulamanız boyunca takip ediliyorsa, yalnızca başlangıçta bir kez kaba dokunmanız gerekir.
En üstteki örneği nasıl çözüyorsanız büyük ölçüde hangi uygulama türüne bağlı olduğunuza bağlıdır. Bir web uygulamasıysa, ASP.Net integration ve MVC integration sizin için halledecektir. (Sonuçta, ASP.Net'deki en üstteki örnek, denetimimizin dışında olan Application
'dur).
Öte yandan, bir konsol uygulaması veya WinForms uygulaması, yukarıdaki örneğimde olduğu gibi, ilk örneği Main
'da manuel olarak çözersiniz.
Örnek bu, ama ne daha fazla sınıfta bir örneğe ihtiyacım varsa? Türü her sınıfa kaydedemez. – user137348
Ancak, bu en üstteki örneği kodda bir yerlerde çözmeniz gerekiyor. Türler, başlangıçta (Global.asax) kaydedilir ve kodun en üstteki örneğini çözmeniz gerekir. Sonunda, bunu belirten bir yazı buldum. http://geekswithblogs.net/Sharpoverride/archive/2009/08/15/ioc-in-.net-part-1-autofac.aspx Bu yaklaşım hakkında ne düşünüyorsunuz? – user137348
Güncellenmiş cevabımı görün ... ve evet, @Sharpoverrides yaklaşımı tamam, Global.asax'ın konteyner oluşturma koduyla karıştırılmamasını sağlar. Sonuçta, kabı test eden ve konteynırı oluşturan tek bir sorumluluk sınıfına sahip testçileri daha kolay test etmeyi sağlayan gerçekten yazmanız gerekir. –