public CreateCurrencyCommandHandler( ICurrencyRepository currencyRepository, IMessagePublisher messagePublisher, IDomainEventConverter domainEventConverter) : base(messagePublisher, domainEventConverter) { _currencyRepository = currencyRepository; }
protected DomainEventAwareCommandHandler( IMessagePublisher messagePublisher, IDomainEventConverter domainEventConverter) { this.MessagePublisher = messagePublisher ?? throw new ArgumentNullException(nameof(messagePublisher)); this.DomainEventConverter = domainEventConverter ?? throw new ArgumentNullException(nameof(domainEventConverter)); }
public void AddNestedConverter(IDomainEventConverter nestedConverter) { if (nestedConverter == null) { throw new ArgumentNullException(nameof(nestedConverter)); } try { var baseType = nestedConverter.GetType().BaseType ?? throw new ArgumentException("Base type is null.", nameof(nestedConverter)); var isConstructedGenericType = baseType.IsConstructedGenericType; if (!isConstructedGenericType) { throw new ArgumentException("Base type is not a constructed generic type.", nameof(nestedConverter)); } var genericTypeDefinition = baseType.GetGenericTypeDefinition(); if (genericTypeDefinition != typeof(DomainEventConverterBase <,>)) { throw new ArgumentException("Wrong base type's generic type definition", nameof(nestedConverter)); } var domainEventType = baseType.GetGenericArguments().First(); if (_nestedConverters.ContainsKey(domainEventType)) { throw new InvalidOperationException($"There is already a converter registered for the domain type '{domainEventType.FullName}'."); } _nestedConverters.Add(domainEventType, nestedConverter); } catch (ArgumentException ex) { throw new ArgumentException("Nested converter must be inherited from 'DomainEventConverterBase<YourDomainEvent, YourMessage>'.", nameof(nestedConverter), ex); } }