Tôi có một mô-đun Autofac trong đó có các (tỉa xuống) logic sau đây trong Load override:Dừng Autofac mô-đun tên đăng ký lưu đã đăng ký
protected override void Load(ContainerBuilder builder)
{
foreach (var componentType in allTypesInAllAvailableAssemblies) // Set elsewhere
{
var handlerInterfaces = componentType.GetInterfaces().Where(i => i.IsClosedTypeOf(typeof(IMessageHandler<>)));
if (handlerInterfaces.Any())
builder.RegisterType(componentType).As(handlerInterfaces);
}
}
này đang tìm kiếm bất kỳ lớp đó tuyên bố bản thân một handler nhắn và đăng ký nó với tất cả các giao diện IMessageHandler mà nó thực hiện.
Điều tôi muốn làm là không đăng ký thành phần nếu nó đã được đăng ký. Là một phần thưởng, nó sẽ là lý tưởng nếu tôi có thể cập nhật đăng ký hiện tại để giải quyết chống lại (các) giao diện xử lý tin nhắn nếu nó chưa được.
Vì lợi ích của các đối số có thể giả định rằng mã này sẽ chạy sau tất cả các loại khác đã được đăng ký (bao gồm cả các ứng cử viên xử lý thông điệp có thể)
Tôi đã sử dụng AttachToComponentRegistration
ghi đè cho các thao tác đăng ký trong quá khứ nhưng có vẻ như nó không có ích trong kịch bản này.
Điều này có thể hay tôi nên suy nghĩ lại về thiết kế và lực lượng bổ sung của mình để khai báo rõ ràng trình xử lý của họ?
Bạn đã thử sử dụng lớp AnyConcreteTypeNotAlreadyRegisteredSource chưa?Xem: http://stackoverflow.com/questions/3413660/ –