/// <summary>
        /// Scan all assemblies loaded into the current appdomain for message handlers
        /// </summary>
        public void ScanForHandlers()
        {
#if NETSTANDARD1_6
            var assemblies = Microsoft.Extensions.DependencyModel.DependencyContext.Default.RuntimeLibraries;
            foreach (var assembly in assemblies)
            {
                try
                {
                    var asm         = Assembly.Load(new AssemblyName(assembly.Name));
                    var pluginTypes = asm != null?asm.GetTypes().Where(IsHandler).ToList() : null;

                    if (null != pluginTypes && pluginTypes.Count > 0)
                    {
                        _container.RegisterForAll(pluginTypes);
                    }
                }
                catch (Exception)
                { }
            }
#else
            foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            {
                var pluginTypes = asm != null?asm.GetTypes().Where(IsHandler).ToList() : null;

                if (null != pluginTypes && pluginTypes.Count > 0)
                {
                    _container.RegisterForAll(pluginTypes);
                }
            }
#endif
        }
        public void ShouldGetTypedInstanceOfRegisteredType()
        {
            // Arrange
            var services = new ServiceConnect.Container.Default.Container();

            services.RegisterForAll(typeof(MyMessageHandler));
            var busContainer = new DefaultBusContainer();

            busContainer.Initialize(services);

            // Act
            var result = busContainer.GetInstance <IMessageHandler <MyMessage> >();

            // Assert
            Assert.NotNull(result);
            Assert.Equal("MyMessageHandler", result.GetType().Name);
        }
        public void ShouldGetAllHandlerReferences()
        {
            // Arrange
            var services = new ServiceConnect.Container.Default.Container();

            services.RegisterForAll(typeof(MyMessageHandler));
            var busContainer = new DefaultBusContainer();

            busContainer.Initialize(services);

            // Act
            var result = busContainer.GetHandlerTypes();

            // Assert
            Assert.NotNull(result);
            Assert.Equal(1, result.Count());
            Assert.Equal("MyMessage", result.ToList()[0].MessageType.Name);
            Assert.Equal("MyMessageHandler", result.ToList()[0].HandlerType.Name);
        }
        public void ShouldGetInstanceOfRegisteredTypeWithCtorParameters()
        {
            // Arrange
            var services = new ServiceConnect.Container.Default.Container();

            services.RegisterForAll(typeof(MyMessageHandler2));
            var busContainer = new DefaultBusContainer();

            busContainer.Initialize(services);

            // Act
            var result = busContainer.GetInstance <IMessageHandler <MyMessage> >(new Dictionary <string, object> {
                { "name", "TestName" }
            });

            // Assert
            Assert.NotNull(result);
            Assert.Equal("MyMessageHandler2", result.GetType().Name);
        }