Trả lời

9

Hộp ngoài IoC không hỗ trợ kiểu trang trí hoặc khám phá tự động, đó là "theo thiết kế" theo như tôi biết.

Ý tưởng là cung cấp cấu trúc IoC cơ bản hoạt động ngoài hộp hoặc nơi các vùng chứa IoC khác có thể được cắm vào để mở rộng chức năng mặc định. Vì vậy, nếu bạn cần bất kỳ tính năng nâng cao nào (hỗ trợ cho một nhà xây dựng cụ thể, đăng ký tự động tất cả các loại thực hiện giao diện hoặc trang trí và chặn), bạn phải tự viết hoặc sử dụng một thùng chứa IoC cung cấp chức năng này .

1

workaround không áp dụng trang trí cho tất cả các trường hợp thuộc loại nhưng sử dụng các phương pháp mở rộng để trừu tượng logic trang trí thành một tệp khác.

Xác định cấu trúc trang trí như:

public static class QueryHandlerRegistration 
{ 
    public static IServiceCollection RegisterQueryHandler<TQueryHandler, TQuery, TResult>(
     this IServiceCollection services) 
     where TQuery : IQuery<TResult> 
     where TQueryHandler : class, IQueryHandler<TQuery, TResult> 
    { 
     services.AddTransient<TQueryHandler>(); 
     services.AddTransient<IQueryHandler<TQuery, TResult>>(x => 
      new LoggingDecorator<TQuery, TResult>(x.GetService<ILogger<TQuery>>(), x.GetService<TQueryHandler>())); 
     return services; 
    } 
} 

Và gọi nó thích:

services.AddMvc(); 
// Add application services. 
services.AddTransient<IEmailSender, AuthMessageSender>(); 
services.AddTransient<ISmsSender, AuthMessageSender>(); 

services.RegisterQueryHandler<FindThingByIdQueryHandler, FindThingByIdQuery, Thing>(); 

Ngoài ra còn có các gói Scrutor được tiến hành.

+2

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/16875007) – rafalmp

Các vấn đề liên quan