Tôi đang làm việc trên một dự án mà khuôn khổ Unity được sử dụng như là container IoC. Câu hỏi của tôi liên quan đến việc tiêm một phụ thuộc tùy chọn (trong trường hợp này là một logger) vào một số lớp bằng cách sử dụng tiêm thuộc tính hoặc setter.Setter/thuộc tính tiêm trong Unity mà không có thuộc tính
Tôi không muốn làm lộn xộn các nhà xây dựng của tất cả các lớp học với các phụ thuộc tùy chọn này, nhưng tôi không thể tìm ra cách tốt để xử lý điều này trong Unity. Cách bạn sẽ làm điều này là, theo MSDN documentation, bằng cách thêm một thuộc tính đối với tài sản:
private ILogger logger;
[Dependency]
public ILogger Logger
{
get { return logger; }
set { logger = value; }
}
Tôi tìm thấy điều này rất xấu xí. Trong StructureMap, người ta có thể làm như sau để đặt tất cả các thuộc tính của một loại nhất định:
SetAllProperties(policy => policy.OfType<ILog>());
Có ai biết nếu có thể làm điều gì đó tương tự trong Unity không?
Edit:
Kim Major gợi ý sử dụng this approach mà cũng có thể đạt được thông qua mã.
Tôi sẽ quan tâm đến các ví dụ về cách thực hiện điều này tự động cho tất cả các thuộc tính phù hợp.
Cảm ơn bạn đã cung cấp mẹo. Tôi đoán tôi có thể sử dụng điều này như là một giải pháp dự phòng, nhưng theo như tôi có thể thấy điều này đòi hỏi bạn phải tạo ra một thiết lập cho mỗi lớp có sử dụng logger. Tôi tự hỏi nếu đó là một cách để chỉ định này một lần, để tất cả các lớp bằng cách sử dụng logger sẽ được tự động tiêm. – LittleBoyLost
Tôi chưa thử làm như vậy vì vậy tôi không chắc chắn. Tôi nghĩ bạn có thể đăng ký tất cả các lớp học của bạn.Sau đó, phản ánh qua các lớp đã đăng ký và thêm đăng ký tiêm setter nếu loại có một Setter ILogger. –