Hiện tại tôi đang thử nghiệm một chút với các thùng chứa phụ thuộc, lần này với Unity.Dependency Injection và các thông số hàm tạo khác - thực hành không tốt?
Với giao diện sau:
public interface IPodcastCommService
{
void Download();
void Upload();
}
và thực hiện như sau:
public class PodcastService
{
private IPodcastCommService commservice;
private String url;
public PodcastService(String url, IPodcastCommService commservice)
{
this.commservice = commservice;
this.url = url;
}
}
Bởi vì các nhà xây dựng, tôi đang tìm kiếm một giải pháp để vượt qua các tham số cho nó và tìm thấy nó:
var p = container.Resolve<IPodcastCommService>(new ParameterOverride("url", myUrl));
Cho đến giờ rất tốt, nhưng đồng thời tôi đọc về mức độ tồi tệ của nó và cách thức xấu thiết kế của lớp là có và có, nó trông một chút xấu xí. Nhưng làm thế nào tôi có thể vượt qua một tham số đến lớp một cách thanh lịch?
Suy nghĩ đầu tiên của tôi là làm tài sản đó, nhưng sau đó tôi phải kiểm tra mỗi khi tôi cần Url mà nó đã được cung cấp.
Cập nhật: Một ví dụ, nơi tôi đọc rằng đây là thiết kế xấu, là thế này:
Nhưng có thể có trường hợp bạn có vượt qua trong các thông số nhà xây dựng tùy chỉnh cho các hoạt động quyết tâm. Một số người có thể lập luận rằng tiếng hét của kiến trúc xấu này nhưng có những tình huống như đưa một thùng chứa DI vào một hệ thống cũ có thể yêu cầu những loại hành động này.
Nguồn: http://mikaelkoskinen.net/unity-passing-constructor-parameters-to-resolve/
bạn có thể cho tôi biết nơi bạn có màu đỏ vì đây là thiết kế tồi không? Bởi vì tôi thực sự nghĩ rằng thiết kế này là tốt nhất bạn sẽ nhận được. – Egi
@Egi: Tôi đã cập nhật câu hỏi của mình bằng nguồn. – Kai
Bạn có thể sử dụng [ServiceLocator] (https://commonservicelocator.codeplex.com/) để thực hiện DI mà không liệt kê các thuộc tính được chèn vào trong hàm tạo. – orad