Điều này cũng trở nên khó chịu - nó không KHÔ
Đúng. Nhưng bạn chỉ có thể làm được rất nhiều điều cho mối quan tâm xuyên suốt trải khắp mọi loại hình bạn có. Bạn phải sử dụng trình ghi nhật ký ở khắp mọi nơi, vì vậy bạn phải có thuộc tính trên các loại đó.
Vì vậy, hãy xem chúng ta có thể làm gì với nó.
Singleton
Singleton thật khủng khiếp <flame-suit-on>
.
Tôi khuyên bạn nên gắn bó với việc tiêm thuộc tính như bạn đã làm với ví dụ thứ hai của mình. Đây là cách tính toán tốt nhất mà bạn có thể làm mà không cần dùng đến phép thuật. Tốt hơn là có một phụ thuộc rõ ràng hơn là ẩn nó qua một singleton.
Nhưng nếu những chiếc đĩa đơn giúp bạn tiết kiệm đáng kể thời gian, bao gồm tất cả việc tái cấu trúc mà bạn sẽ phải làm (thời gian quả cầu pha lê!), Tôi cho rằng bạn có thể sống chung với chúng. Nếu có một lần sử dụng Singleton, thì đây có thể là nó. Hãy ghi nhớ những chi phí nếu bạn từng muốn thay đổi tâm trí của bạn sẽ vào khoảng cao như nó được.
Nếu bạn làm điều này, hãy kiểm tra câu trả lời của những người khác sử dụng các Registry
mô hình (xem mô tả), và những người đăng ký một (resetable) singleton nhà máy chứ không phải là một trường hợp singleton logger.
Có những lựa chọn thay thế khác có thể hoạt động tốt mà không ảnh hưởng nhiều, vì vậy bạn nên kiểm tra chúng trước.
Đoạn mã Visual Studio
Bạn có thể sử dụng các đoạn mã Visual Studio để tăng tốc độ nhập của mã lặp lại đó. Bạn sẽ có thể gõ một cái gì đó giống như logger
tab, và mã sẽ xuất hiện một cách kỳ diệu cho bạn.
Sử dụng AOP để KHÔ
Bạn có thể loại bỏ một chút mã chèn thuộc tính đó bằng cách sử dụng khuôn khổ Lập trình hướng theo khía cạnh (AOP) như PostSharp để tự động tạo một số mã.
Nó có thể trông giống như thế này khi bạn hoàn thành:
[InjectedLogger]
public ILogger Logger { get; set; }
Bạn cũng có thể sử dụng mã mẫu theo dõi phương pháp của họ để tự động theo dõi mã vào và ra của phương thức, điều này có thể loại bỏ sự cần thiết phải thêm tất cả các thuộc tính của trình ghi nhật ký lại với nhau. Bạn có thể áp dụng thuộc tính ở cấp độ lớp hoặc rộng không gian tên:
[Trace]
public class MyClass
{
}
#if DEBUG
[assembly: Trace( AttributeTargetTypes = "MyNamespace.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Public )]
#endif