Peki, arayüzler nasıl görünebilir?
Bunun gibi
:
public interface IEmployeeRepository
{
Employee[] GetAll();
}
ve istediğiniz gibi o zaman birçok uygulamalar olabilir:
public class EmployeeRepositoryEF: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying your EF DbContext
}
}
public class EmployeeRepositoryXML: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying an XML file
}
}
public class EmployeeRepositoryWCF: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying some remote WCF service
}
}
and so on ... you could have as many implementation as you like
Eğer biz depo nasıl uyguladıklarını gerçekten önemli değil görebileceğiniz gibi.Önemli olan, tüm depoların ve uygulamaların tanımlanan sözleşmeye (arabirim) uygun olması ve çalışanların listesini döndüren tüm GetAll
yöntemine sahip olmasıdır.
Ve sonra bu arabirimi kullanan bir denetleyiciniz olacaktır.
public class EmployeesController: Controller
{
private readonly IEmployeeRepository _repository;
public EmployeesController(IEmployeeRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
var employees = _repository.GetAll();
return View(employees);
}
}
Denetleyicinin deponun belirli bir uygulamasına nasıl bağlı olmadığına bakın. Tüm bilmesi gereken, bu uygulamanın sözleşmeye saygı duymasıdır. Şimdi yapmanız gereken tek şey, favori bağımlılık enjeksiyon çerçevenizi istediğiniz uygulamayı kullanmak üzere yapılandırmaktır.
- Ninject.MVC3 Nuget sadece tek bir kod satırı ile EF uygulamasını kullanmaya karar oluşturulan
~/App_Start/NinjectWebCommon.cs
kodunda
yükleyin:: İşte
bu Ninject ile yapılır nasıl bir örnek private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IEmployeeRepository>().To<EmployeeRepositoryEF>();
}
artık herhangi manuel instantiations yapmak gerekir Bu şekilde Bu depo sınıfları ve sağanak ya da her neyse endişesi. Bunları sizin için yöneten ve tanımlanmış uygulamayı denetleyici yapıcıya enjekte etmeyi sağlayan bağımlılık enjeksiyon çerçevesidir.
Ve sadece size denetleyicisi tek bir kod satırı dokunmadan veri erişim teknolojisini geçiş olabilir bu yapılandırmayı değiştirerek
. Bu şekilde izolasyonda ünite testi de devreye giriyor. Denetleyici kodunuz artık depoya zayıf bir şekilde bağlandığından (tanıttığımız arabirim sayesinde) birim testinde yapmanız gereken tek şey, depoda davranışını tanımlamanıza izin veren bazı sahte uygulamaların sağlanmasıdır. Bu size, Index denetleyicisinin bir veritabanına veya herhangi bir bağımlılığa bağlı olmadan birim eylemini sınamanızı sağlar. Komple izolasyon.
Ben de
following articles ASP.NET MVC TDD ve DI hakkında ödeme davet ediyoruz. hızlı cevap için
wonderfull cevap, her açıklama değerdir .. işlerin nasıl yürüdüğünü anladım. Teşekkür ederim, puanlarımın 15'in altında olduğu için kabul edilen bu cevabı işaretleyemem, en kısa zamanda kazanacağım gibi bunu cevap olarak kabul ediyorum. Bu makale için – Meson
teşekkürler .. ve benim bağımlılık enjeksiyon çerçevesinde 'EmployeeRepositoryEF' yapılandırmak eğer varsayalım, benim denetleyicisi tüketir bu' EmployeeRepositoryEF', ama .. aynı kumanda 2 uygulanmasını tüketmek istiyorsanız bu ne Soru aptal im eğer çok özür dilerim .. – Meson
Örnek I sağlayıcısında denetleyici, kurucusunda bir "IEmployeeRepository" örneği bekler. Sadece tek bir uygulama geçirilebilir. Diğer yandan, arayüzün farklı bir uygulamasına ihtiyaç duyabilecek başka bir kontrol cihazına sahip olabilirsiniz. Bu mükemmel bir şekilde mümkün. DI çerçevenizi sadece ControllerA'daki ControllerA ve ImplementationB'de ImplementationA enjekte edecek şekilde yapılandırmanız gerekir. Sözdizimi elbette farklı DI çerçeveleri arasında değişecektir. –