Tôi đang viết một thư viện sẽ cung cấp một bộ sưu tập các loại công khai cho người tiêu dùng của nó.Giá trị mặc định cho các đối số hàm dựng trong một dự án thư viện
Tôi muốn tạo các loại từ thư tiêm phụ thuộc thư viện này thân thiện. Điều này có nghĩa là mọi lớp cần có một hàm tạo thông qua đó có thể chỉ định mọi phụ thuộc duy nhất của đối tượng đang được khởi tạo. Tôi cũng muốn thư viện tuân theo quy ước về nguyên tắc cấu hình. Điều này có nghĩa rằng nếu một người tiêu dùng muốn hành vi mặc định, anh ta có thể sử dụng một constructor parameterless và đối tượng sẽ bằng cách nào đó xây dựng các phụ thuộc cho chính nó.
Trong ví dụ (C#):
public class Samurai {
private readonly IWeapon _weapon;
// consumers will use this constructor most of the time
public Samurai() {
_weapon = ??? // get an instance of the default weapon somehow
}
// consumers will use this constructor if they want to explicitly
// configure dependencies for this instance
public Samurai(IWeapon weapon) {
_weapon = weapon;
}
}
giải pháp đầu tiên của tôi sẽ được sử dụng các mô hình dịch vụ định vị.
Mã này sẽ trông như thế này:
...
public Samurai() {
_weapon = ServiceLocator.Instance.Get<IWeapon>();
}
...
Tôi có một vấn đề với điều này, mặc dù. Trình định vị dịch vụ đã được gắn cờ là một mẫu chống (link) và tôi hoàn toàn đồng ý với các đối số này. Mặt khác, Martin Fowler chủ trương sử dụng mô hình định vị dịch vụ chính xác trong tình huống này (các dự án thư viện) (link). Tôi muốn cẩn thận và loại bỏ sự cần thiết có thể để viết lại thư viện sau khi nó cho thấy rằng dịch vụ định vị thực sự là một ý tưởng tồi.
Vì vậy, trong kết luận - bạn có nghĩ rằng định vị dịch vụ là tốt trong trường hợp này? Tôi có nên giải quyết vấn đề của mình theo một cách hoàn toàn khác không? Bất kỳ suy nghĩ được chào đón ...
Điều quan trọng là phải giữ một lớp DI thân thiện. +1 –