public List<MessageOptions> GetMessageOptions(IEnumerable<Assembly> assembliesToScan = null)
{
var options = new List<MessageOptions>();
var assemblies = assembliesToScan ?? GetAssemblies();
var typeToFilter = GetSubscriptionFilters(assemblies);
foreach (var assembly in assemblies)
{
foreach (var type in assembly.GetTypes())
{
if (type.IsInterface || type.IsAbstract || (!typeof(IMessage).IsAssignableFrom(type)))
continue;
var reliability = type.GetCustomAttributes(typeof(BusOptionsAttribute), true).SingleOrDefault() as BusOptionsAttribute;
if (options.All(x => x.MessageType != type))
options.Add(new MessageOptions(type, reliability == null ? ReliabilityLevel.FireAndForget : reliability.ReliabilityLevel,
reliability == null ? WireTransportType.ZmqPushPullTransport : reliability.TransportType,
typeToFilter.GetValueOrDefault(type)));
}
}
return options;
}