Ở phần này chúng ta sẽ tìm hiểu về IoC và cách để implement nó. Đây là bước đầu tiên để đạt được mục tiêu làm giảm sự phụ thuộc giữa các lớp ứng dụng. Các bước được minh họa theo follow sau:
Ở phần này chúng ta sẽ tìm hiểu về IoC và cách để implement nó. Đây là bước đầu tiên để đạt được mục tiêu làm giảm sự phụ thuộc giữa các lớp ứng dụng. Các bước được minh họa theo follow sau:
Chắc hẳn các thuật ngữ Inversion of Control (IoC), Dependency Inversion Principle (DIP), Dependency Injection (DI), và IoC containers không còn xa lạ với nhiều người. Tuy nhiên không dễ để làm rõ sự khác nhau giữa các khái niệm này.
Loạt bài viết này cố gắng mang đến cho các bạn cái nhìn tổng quan nhất, với mong muốn cùng các bạn khám phá kiến thức về IoC, DIP, DI..
Trong dự án asp net core, khi các bạn sử dụng Generic Repository Pattern, làm cách nào để register
generic interface và implementation generic interface bằng cách sử dụng ASP.NET Core DI container
?
Ok, với một interface đơn giản và implementation của nó, ta sử dụng như sau
serviceCollection.AddSingleton<IService, MyService>();
Vậy còn kiểu Generic thì sao?
Chúng ta cùng xem lại phát biểu về phương thức AddSingleton
public static IServiceCollection AddSingleton<TService, TImplementation>(this IServiceCollection serviceswhere TService : class where TImplementation : class, Tservice
Phương pháp này sử dụng được với hầu hết các trường hợp, ngoại trừ các service generic..
Xét một ví dụ đơn giản, chúng ta có interface
public interface IThing<T> { string GetName { get; } }
và một implementation của nó như sau
public class GenericThing<T> : IThing<T> { public GenericThing() { GetName = typeof(T).Name; } public string GetName { get; } }
Câu hỏi đặt ra là khi sử dụng IThing<SomeType>
làm sao chúng ta lấy được chính xác GenericThing<SomeType>
đã được injected
vào?
Trong trường hợp này chúng ta sử dụng phương thức mở rộng khác trong ServiceCollection, bằng cách như sau
serviceCollection.AddSingleton(typeof(IThing<>), typeof(GenericThing<>)); Xem thêm