protected override void Setup(FeatureConfigurationContext context) { var coreScannerConfig = context.Settings.Get <AssemblyScannerConfiguration>(); var unicastRoutingTable = context.Settings.Get <UnicastRoutingTable>(); var conventions = context.Settings.Get <Conventions>(); var messageTypes = TypesScanner.ScanMessageTypes(coreScannerConfig, conventions); var routes = new List <RouteTableEntry>(); foreach (var messageType in messageTypes) { if (IsRouteDefinedFor(messageType, unicastRoutingTable)) { continue; } var routeToAttribute = messageType.GetCustomAttribute <RouteToAttribute>(); if (routeToAttribute != null) { routes.Add(new RouteTableEntry(messageType, UnicastRoute.CreateFromEndpointName(routeToAttribute.Destination))); } else { var routeAttribute = messageType.Assembly.GetCustomAttribute <RouteAttribute>(); if (conventions.IsCommandType(messageType) && routeAttribute?.CommandsDestination != null) { routes.Add(new RouteTableEntry(messageType, UnicastRoute.CreateFromEndpointName(routeAttribute.CommandsDestination))); } else if (conventions.IsMessageType(messageType) && routeAttribute?.MessagesDestination != null) { routes.Add(new RouteTableEntry(messageType, UnicastRoute.CreateFromEndpointName(routeAttribute.MessagesDestination))); } } } if (routes.Any()) { unicastRoutingTable.AddOrReplaceRoutes("AttributeRoutingSource", routes); } }
public void When_using_default_settings_all_messages_should_be_found() { var assemblyScannerConfig = new AssemblyScannerConfiguration(); var conventions = new Conventions(); conventions.Add(new DelegateMessageConvention() { IsCommandTypeConvention = t => t.Name.EndsWith("Command"), IsMessageTypeConvention = t => t.Name.EndsWith("Message") }); var types = TypesScanner.ScanMessageTypes(assemblyScannerConfig, conventions).ToList(); Assert.Contains(typeof(ACommand), types); Assert.Contains(typeof(AMessage), types); Assert.Contains(typeof(ThisIsAnExcludedCommand), types); }
public void When_excluding_types_types_from_assembly_should_not_be_found() { var assemblyScannerConfig = new AssemblyScannerConfiguration(); assemblyScannerConfig.ExcludeTypes(typeof(ThisIsAnExcludedCommand)); var conventions = new Conventions(); conventions.Add(new DelegateMessageConvention() { IsCommandTypeConvention = t => t.Name.EndsWith("Command"), IsMessageTypeConvention = t => t.Name.EndsWith("Message") }); var types = TypesScanner.ScanMessageTypes(assemblyScannerConfig, conventions).ToList(); Assert.Contains(typeof(ACommand), types); Assert.Contains(typeof(AMessage), types); Assert.False(types.Contains(typeof(ThisIsAnExcludedCommand))); }