cuốn sách gpt4 ai đã làm

c# - Chèn phụ thuộc của các lớp .Net cụ thể

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:05:45 29 4
mua khóa gpt4 Nike

Cách ưa thích để tiêm/cô lập một lớp được niêm phong trong dll và không triển khai giao diện là gì?

Chúng tôi sử dụng Ninject.

Giả sử chúng ta có một lớp "Máy chủ" và chúng ta muốn chèn/cô lập lớp TcpServer được "Máy chủ" sử dụng.

Không muốn nói quá cụ thể vì muốn biết cách tốt nhất nhưng hãy diễn đạt như thế này:

Máy chủ lớp công khai 
{
IServer_server;
Máy chủ công cộng(máy chủ IServer)
{
_máy chủ = máy chủ;
}

khoảng trống công khai DoSomething()
{
_server.DoSomething();
}
}

_máy chủ nên được đưa vào TcpClient hoặc mô phỏng trong các trường hợp thử nghiệm

câu trả lời hay nhất

nếu như Máy chủ Tcp được niêm phong và không triển khai bất kỳ giao diện nào, nhưng bạn vẫn muốn tách ứng dụng khách khỏi quá trình triển khai cụ thể của nó, bạn phải xác định một giao diện mà ứng dụng khách có thể giao tiếp và mộtBộ chuyển đổitừ Máy chủ Tcp sang giao diện mới.

Việc trích xuất một giao diện từ một lớp cụ thể có thể rất hấp dẫn, nhưng đừng làm điều đó. Nó tạo ra sự kết nối ngữ nghĩa giữa giao diện và lớp cụ thể mà rất có thể bạn sẽ phá vỡ Nguyên tắc thay thế Liskov .

ngược lại,Theo nhu cầu của khách hàngXác định giao diện. điều này đến từ Nguyên tắc đảo ngược phụ thuộc ;BẰNGỨNG DỤNG , Chương 11 giải thích: “Máy khách […] có giao diện trừu tượng”。 Giao diện vai tròhầu hết.

Vì vậy, nếu khách hàng của bạn cần mộtLàm gì đó phương pháp, bạn chỉ cần thêm vào giao diện:

giao diện công cộng IServer
{
void DoSomething();
}

Bây giờ bạn có thể sử dụngTiêm hàm tạo (tiêm)SẽMáy chủ IServerTiêm khách hàng của bạn:

lớp công khai 
{
máy chủ IServer riêng chỉ đọc;

Máy khách công cộng (máy chủ IServer)
{
nếu (máy chủ == null)
ném ArgumentNullException mới ("máy chủ");

this.server = máy chủ;
}

khoảng trống công khai DoFoo()
{
this.server.DoSomething();
}
}

khi nói đến Máy chủ Tcp Bạn có thể tạo một bộ chuyển đổi trên nó:

lớp công khai TcpServerAdapter: IServer
{
riêng tư chỉ đọc TcpServer imp;

TcpServerAdapter công khai(TcpServer imp)
{
nếu (imp == null)
ném ArgumentNullException mới ("imp");

this.imp = imp;
}

khoảng trống công khai DoSomething()
{
this.imp.DoWhatever();
}
}

Lưu ý rằng các phương thức không nhất thiết phải có cùng tên (hoặc thậm chí có cùng chữ ký) mới được điều chỉnh.

Về c# - tính năng chèn phụ thuộc của các lớp .Net cụ thể, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/30838596/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress