예제 #1
0
        public void Send <T>(T command) where T : ICommand
        {
            var handler = InjectContainer.GetInstance <ICommandHandler <T> >();

            if (handler != null)
            {
                try
                {
                    handler.Execute(command);
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
                finally
                {
                    handler.Dispose();
                }
            }
            else
            {
                //Cannot find command handler for type
                throw new InvalidOperationException(string.Format("无法找到类型的命令处理程序 '{0}'", typeof(T).FullName));
            }
        }
예제 #2
0
 private void InjectService()
 {
     InjectContainer.RegisterType <IPasswordHasher, PlainTextPasswordHasher>();
     InjectContainer.RegisterType <IIdentityReadDBConnectionStringProvider, AppsettingRepositoryReadDBConnectionStringProvider>();
     InjectContainer.RegisterType <IIdentityWriteDBConnectionStringProvider, AppsettingRepositoryWriteDBConnectionStringProvider>();
     InjectContainer.RegisterType <IIdentityReportDataAccessor, IdentityReportDataAccessor>();
 }
        public void CannotResolveAbstractClass()
        {
            var container = new InjectContainer();
            container.Register<IInterface1, AbstractClass1>();

            Assert.That(() => container.Resolve<AbstractClass1>(), Throws.InstanceOf<ResolutionFailedException>());
        }
        public void CannotResolveInterface()
        {
            var container = new InjectContainer();
            container.Register<IInterface1, IInherited1>();

            Assert.That(() => container.Resolve<IInterface1>(), Throws.InstanceOf<ResolutionFailedException>());
        }
        public void CanCreatePrivateNestedClass()
        {
            var container = new InjectContainer();
            var instance = container.Resolve<PrivateClass>();

            Assert.IsNotNull(instance);
        }
        public void CanCreateOnePublicConstructorClassWithMultiPrivateConstructors()
        {
            var container = new InjectContainer();
            var instance = container.Resolve<MultiplePrivateOnePublicConstructorClass>();

            Assert.IsNotNull(instance);
        }
예제 #7
0
        static void Main(string[] args)
        {
            InjectContainer.RegisterType <IDomainRepository, DomainRepository>();
            InjectContainer.RegisterType <IEventStorage, SQLServerEventStorage>();
            InjectContainer.RegisterInstance <IEventPublisher>(new RabbitMQEventPublisher("amqp://localhost:5672"));
            InjectContainer.RegisterType <IEventDBConnectionStringProvider, AppSettingEventDBConnectionStringProvider>();

            //这一部分需要重构到配置文件中
            InjectContainer.RegisterType <IInventoryReadDBConnectionStringProvider, AppsettingInventoryReadDBConnectionStringProvider>();
            InjectContainer.RegisterType <IInventoryWriteDBConnectionStringProvider, AppsettingInventoryWriteDBConnectionStringProvider>();
            InjectContainer.RegisterType <IInventoryReportDataAccessor, InventoryReportDataAccessor>();

            InjectContainer.RegisterType <IRentalReadDBConnectionStringProvider, AppsettingRentalReadDBConnectionStringProvider>();
            InjectContainer.RegisterType <IRentalWriteDBConnectionStringProvider, AppsettingRentalWriteDBConnectionStringProvider>();
            InjectContainer.RegisterType <IRentalReportDataAccessor, RentalReportDataAccessor>();
            InjectContainer.RegisterType <ICommandTracker, SignalRCommandTracker>();


            var handlers = BuildHandlerConfigurations();

            HandlerRegister register = new HandlerRegister();

            foreach (var handler in handlers)
            {
                Console.WriteLine($"Starting handler '{handler.Name}'");
                RegisterCommandHandlers(handler.LibraryName);
                RegisterEventHandlers(handler.LibraryName);
                register.RegisterAndStart(handler.LibraryName);

                Console.WriteLine($"Started handler '{handler.Name}'");
            }
        }
예제 #8
0
        public DbContext()
        {
            var conn   = InjectContainer.GetInstance <IEventDBConnectionStringProvider>().ConnectionString;
            var client = new MongoClient(conn);

            _db = client.GetDatabase("LibraryEventStorage");
        }
예제 #9
0
        public static void Register()
        {
            InjectContainer.RegisterType <ICommonService, CommonService>();

            InjectContainer.RegisterType <ILogHelper, LogHelper>();

            InjectContainer.RegisterType <IFileService, FileService>();
        }
예제 #10
0
        public void CanCreateConcreteArgumentClass()
        {
            var container = new InjectContainer();
            var instance = container.Resolve<ConcreteParameterClass>();

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Arg);
        }
예제 #11
0
 private void InjectService()
 {
     InjectContainer.RegisterInstance <ICommandPublisher>(new RabbitMQCommandPublisher("amqp://localhost:5672"));
     InjectContainer.RegisterType <IInventoryReadDBConnectionStringProvider, AppsettingInventoryReadDBConnectionStringProvider>();
     InjectContainer.RegisterType <IInventoryWriteDBConnectionStringProvider, AppsettingInventoryWriteDBConnectionStringProvider>();
     InjectContainer.RegisterType <IInventoryReportDataAccessor, InventoryReportDataAccessor>();
     InjectContainer.RegisterType <ICommandTracker, SignalRCommandTracker>();
 }
예제 #12
0
        private void InjectService()
        {
            InjectContainer.RegisterType <ILogDBConnectionStringProvider, AppsettingLogDBConnectionStringProvider>();
            InjectContainer.RegisterType <ILogger, Logger>();

            InjectContainer.RegisterType <IConsulAPIUrlProvider, AppsettingConsulAPIUrlProvider>();
            InjectContainer.RegisterType <IServiceDiscovery, ConsulServiceDiscovery>();
        }
예제 #13
0
 public QueryService()
 {
     Reader       = InjectContainer.GetInstance <IConfigurationReader>();
     DataAccessor = InjectContainer.GetInstance <IQueryDataAccessor>(new Dictionary <string, object>()
     {
         { "connectionString", Reader.ConnectionString }
     });
 }
예제 #14
0
        private static void LogError(Events.DomainEvent domainEvent, System.Exception exception)
        {
            var errorLogCommand = new AddErrorLogCommand();

            errorLogCommand.ErrorObject = domainEvent;
            errorLogCommand.Exception   = exception;

            InjectContainer.GetInstance <ICommandBus>().Send(errorLogCommand);
        }
예제 #15
0
파일: Startup.cs 프로젝트: wanglong/Library
 private void InjectService()
 {
     InjectContainer.RegisterType <IRabbitMQUrlProvider, AppsettingRabbitMQUrlProvider>();
     InjectContainer.RegisterType <ICommandPublisher, RabbitMQCommandPublisher>();
     InjectContainer.RegisterType <IInventoryReadDBConnectionStringProvider, AppsettingInventoryReadDBConnectionStringProvider>();
     InjectContainer.RegisterType <IInventoryWriteDBConnectionStringProvider, AppsettingInventoryWriteDBConnectionStringProvider>();
     InjectContainer.RegisterType <IInventoryReportDataAccessor, InventoryReportDataAccessor>();
     InjectContainer.RegisterType <ICommandTracker, SignalRCommandTracker>();
 }
예제 #16
0
        public CommandHandlerBase()
        {
            this.Reader       = InjectContainer.GetInstance <IConfigurationReader>();
            this.DataAccessor = InjectContainer.GetInstance <IDomainDataAccessor>(new Dictionary <string, object>()
            {
                { "connectionString", Reader.ConnectionString }
            });

            this.ExecuteDateTime = Utility.GetCurrentDateTime();
        }
예제 #17
0
        public static void ApplicationStart()
        {
            // Use Project's Web.config Connection Strings
            DevExpress.XtraReports.Web.ReportDesigner.DefaultReportDesignerContainer
            .RegisterDataSourceWizardConfigFileConnectionStringsProvider();

            // Register inject assembilies
            InjectContainer.RegisterAssembiles(AppDomain.CurrentDomain.GetAssemblies()
                                               .Where(i => i.FullName.StartsWith("DReporting", StringComparison.InvariantCultureIgnoreCase)));
        }
예제 #18
0
 protected virtual void BeforeInject()
 {
     InjectContainer.RegisterType <IConfigurationReader, ConfigurationReader>();
     InjectContainer.RegisterInstance <ILogHelper>(new Log4netHelper());
     #if DEBUG
     InjectContainer.RegisterInstance <IStringEncrypter>(new PlainTextEncrypter());
     #else
     InjectContainer.RegisterInstance <IStringEncrypter>(new StringEncrypter());
     #endif
 }
예제 #19
0
        private static void Injection()
        {
            var mappings = GetConfiguration().GetSection("diMappings").GetChildren();

            foreach (IConfigurationSection mapping in mappings)
            {
                var source = Assembly.Load(mapping["sAssembly"]).GetType(mapping["interface"]);
                var target = Assembly.Load(mapping["tAssembly"]).GetType(mapping["implementation"]);

                InjectContainer.RegisterType(source, target);
            }
        }
예제 #20
0
        private void InjectService()
        {
            InjectContainer.RegisterType <IRabbitMQUrlProvider, AppsettingRabbitMQUrlProvider>();
            InjectContainer.RegisterType <ICommandPublisher, RabbitMQCommandPublisher>();
            InjectContainer.RegisterType <IRentalReadDBConnectionStringProvider, AppsettingRentalReadDBConnectionStringProvider>();
            InjectContainer.RegisterType <IRentalWriteDBConnectionStringProvider, AppsettingRentalWriteDBConnectionStringProvider>();
            InjectContainer.RegisterType <IRentalReportDataAccessor, RentalReportDataAccessor>();
            InjectContainer.RegisterType <ICommandTracker, SignalRCommandTracker>();

            InjectContainer.RegisterType <IConsulAPIUrlProvider, AppsettingConsulAPIUrlProvider>();
            InjectContainer.RegisterType <IServiceDiscovery, ConsulServiceDiscovery>();
        }
예제 #21
0
        private void InjectService()
        {
            InjectContainer.RegisterType <IRabbitMQUrlProvider, AppsettingRabbitMQUrlProvider>();
            InjectContainer.RegisterType <IPasswordHasher, PlainTextPasswordHasher>();
            InjectContainer.RegisterType <IIdentityReadDBConnectionStringProvider, AppsettingRepositoryReadDBConnectionStringProvider>();
            InjectContainer.RegisterType <IIdentityWriteDBConnectionStringProvider, AppsettingRepositoryWriteDBConnectionStringProvider>();
            InjectContainer.RegisterType <IIdentityReportDataAccessor, IdentityReportDataAccessor>();

            InjectContainer.RegisterType <IConsulAPIUrlProvider, AppsettingConsulAPIUrlProvider>();
            InjectContainer.RegisterType <IServiceDiscovery, ConsulServiceDiscovery>();
            InjectContainer.RegisterType <ICommandPublisher, RabbitMQCommandPublisher>();
        }
예제 #22
0
        public void RegisterAndStart(string libraryName)
        {
            var connectionString = InjectContainer.GetInstance <IEventDBConnectionStringProvider>().ConnectionString;

            Console.WriteLine($"Handler starting...");
            Console.WriteLine($"Event DB Connection String: {connectionString}");

            RegisterAndStartCommandHandlers(libraryName);
            RegisterAndStartEventHandlers(libraryName);

            Console.WriteLine($"Handler started.");
        }
        public void Initialize()
        {
            var container = new InjectContainer();

            container.Register <IMoleculeService, MoleculeService>();
            container.Register <IMoleculeRepository, MoleculeRepository>();
            container.Register <ILogService, LogService>();
            container.Register <ILogRepository, LogRepository>();
            container.Register <IAtomService, AtomService>();
            container.Register <ILinkService, LinkService>();

            _linkService = container.Resolve <ILinkService>();
        }
예제 #24
0
        public void SelfRegister()
        {
            var serviceDiscovery = InjectContainer.GetInstance <IServiceDiscovery>();

            serviceDiscovery.RegisterService(new Infrastructure.Operation.Core.Models.Service
            {
                Port        = 5000,
                ServiceName = "IdentityService",
                Tag         = "Microservice API"
            });

            Console.WriteLine("Register to consul successfully.");
        }
        public void Initialize()
        {
            var container = new InjectContainer();
            container.Register<IMoleculeService, MoleculeService>();
            container.Register<IMoleculeRepository, MoleculeRepository>();
            container.Register<ILogService, LogService>();
            container.Register<ILogRepository, LogRepository>();
            container.Register<IAtomService, AtomService>();
            container.Register<ILinkService, LinkService>();
            container.Register<IReplacementReactionService, ReplacementReactionService>();
            container.Register<IAddictionReactionService, AddictionReactionService>();

            _replacementReactionService = container.Resolve<IReplacementReactionService>();
        }
예제 #26
0
        private void Connect()
        {
            var window = InjectContainer.ResolveView <MainWindow>() as Window;

            if (AuthenticationService.Login(Login.Text, Password.Password))
            {
                window?.Show();
                Close();
            }
            else
            {
                Error.Text = "Login ou mot de passe incorrect !";
            }
        }
        private static void GetServices()
        {
            var container = new InjectContainer();

            container.Register <IMoleculeService, MoleculeService>();
            container.Register <IMoleculeRepository, MoleculeRepository>();
            container.Register <ILogService, LogService>();
            container.Register <ILogRepository, LogRepository>();
            container.Register <IAtomService, AtomService>();
            container.Register <ILinkService, LinkService>();
            container.Register <IReplacementReactionService, ReplacementReactionService>();
            container.Register <IAddictionReactionService, AddictionReactionService>();

            moleculeService = container.Resolve <IMoleculeService>();
        }
        public void Subscribe <T>(T domainEvent) where T : DomainEvent
        {
            this.channel.QueueDeclare(queue: domainEvent.EventKey,
                                      durable: true,
                                      exclusive: false,
                                      autoDelete: false,
                                      arguments: null);

            channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

            var consumer = new EventingBasicConsumer(channel);

            IEventHandler <T> instance = InjectContainer.GetInstance <IEventHandler <T> >();

            if (instance == null)
            {
                return;
            }

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);

                var cmd = JsonConvert.DeserializeObject <T>(message);
                Console.WriteLine("[x] Receive New Event: {0}", domainEvent.EventKey);
                Console.WriteLine("[x] Event Parameters: {0}", message);

                try
                {
                    //执行命令操作
                    instance.Handle(cmd);
                    //tracker.Finish(cmd.CommandUniqueId, cmd.EventKey);
                }
                catch (Exception ex)
                {
                    //tracker.Error(cmd.CommandUniqueId, cmd.EventKey, "100001", ex.Message);
                }

                Console.WriteLine("[x] Event Handler Completed");


                channel.BasicAck(ea.DeliveryTag, false);
            };

            channel.BasicConsume(queue: domainEvent.EventKey, autoAck: false, consumer: consumer);
        }
예제 #29
0
        private static void RegisterEventHandlers(string libraryName)
        {
            Func <Type, bool> isEventHandler = i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEventHandler <>);

            var commandHandlers = Assembly.Load(libraryName).GetExportedTypes()
                                  .Where(t => t.GetInterfaces().Any(isEventHandler))
                                  .ToList();

            var registerSource = commandHandlers.Select(h =>
            {
                return(new { FromType = h.GetInterfaces().First(isEventHandler), ToType = h });
            }).ToList();

            foreach (var r in registerSource)
            {
                InjectContainer.RegisterType(r.FromType, r.ToType);
            }
        }
예제 #30
0
        public void RegisterAndStartCommandHandlers(string libraryName)
        {
            var assembly = Assembly.Load(libraryName);

            var allCommands = assembly.GetExportedTypes().Where(p => p.GetInterface("ICommand") != null);

            foreach (var command in allCommands)
            {
                var register       = new RabbitMQCommandSubscriber(InjectContainer.GetInstance <IRabbitMQUrlProvider>());
                var registerMethod = register.GetType().GetMethod("Subscribe");

                var cmd = Activator.CreateInstance(command);
                Console.WriteLine($"Found command {command.FullName}.");
                registerMethod.MakeGenericMethod(command).Invoke(register, new object[1] {
                    cmd
                });
            }
        }
        private void RegisterCommandHandlers()
        {
            Func <Type, bool> isCommandHandler = i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ICommandHandler <>);

            var commandHandlers = typeof(ICommandHandler <>).Assembly.GetExportedTypes()
                                  .Where(t => t.GetInterfaces().Any(isCommandHandler))
                                  .ToList();

            var registerSource = commandHandlers.Select(h =>
            {
                return(new { FromType = h.GetInterfaces().First(isCommandHandler), ToType = h });
            }).ToList();

            foreach (var r in registerSource)
            {
                Logger.LogDebug(typeof(CommandBus), String.Format("Register Command Handler: {0}", r.ToType.FullName));
                InjectContainer.RegisterType(r.FromType, r.ToType);
            }
        }
예제 #32
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var unity = new UnityContainer();

            unity.RegisterType <IRepository, MemoryRepository>();
            CacheContext.SetRepository(unity.Resolve <IRepository>());
            unity.RegisterType <IMainWindowModel, MainWindowViewModel>();
            unity.RegisterType <IDataExporter, ExcelDataExporter>();

            InjectContainer.RegisterView <PlanningView>(unity.Resolve <PlanningView>());
            InjectContainer.RegisterView <ListOfEmployeesView>(unity.Resolve <ListOfEmployeesView>());
            InjectContainer.RegisterView <AddEmployeeView>(unity.Resolve <AddEmployeeView>());
            InjectContainer.RegisterView <EmployeesView>(unity.Resolve <EmployeesView>());
            InjectContainer.RegisterView <MainWindow>(unity.Resolve <MainWindow>());

            var mainWindow = unity.Resolve <AuthenticationWindow>(); // Creating Main window

            mainWindow.Show();
        }
예제 #33
0
        static void Main()
        {
            var container = new InjectContainer();

            container.Register <IMoleculeService, MoleculeService>();
            container.Register <IMoleculeRepository, MoleculeRepository>();
            container.Register <ILogService, LogService>();
            container.Register <ILogRepository, LogRepository>();
            container.Register <IAtomService, AtomService>();
            container.Register <ILinkService, LinkService>();
            container.Register <IReplacementReactionService, ReplacementReactionService>();
            container.Register <IAddictionReactionService, AddictionReactionService>();

            var moleculeService = container.Resolve <IMoleculeService>();
            var logService      = container.Resolve <ILogService>();
            var linkService     = container.Resolve <ILinkService>();

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MoleculeSearchForm(moleculeService, logService, linkService));
        }
예제 #34
0
        public void RegisterAndStartEventHandlers(string libraryName)
        {
            var assembly = Assembly.Load(libraryName);

            var allEvents = assembly.GetExportedTypes().Where(p => p.GetInterface("IDomainEvent") != null);

            foreach (var @event in allEvents)
            {
                var register = new RabbitMQEventSubscriber(InjectContainer.GetInstance <IRabbitMQUrlProvider>(), InjectContainer.GetInstance <ICommandTracker>());

                if (register != null)
                {
                    var registerMethod = register.GetType().GetMethod("Subscribe");

                    var cmd = Activator.CreateInstance(@event);
                    Console.WriteLine($"Found event {@event.FullName}.");
                    registerMethod.MakeGenericMethod(@event).Invoke(register, new object[1] {
                        cmd
                    });
                }
            }
        }
예제 #35
0
        public void Subscribe <T>(T command) where T : ICommand
        {
            this.channel.QueueDeclare(queue: command.CommandKey,
                                      durable: true,
                                      exclusive: false,
                                      autoDelete: false,
                                      arguments: null);

            channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

            var consumer = new EventingBasicConsumer(channel);

            ICommandHandler <T> instance = InjectContainer.GetInstance <ICommandHandler <T> >();

            if (instance == null)
            {
                Console.WriteLine($"The command handler for {typeof(T).FullName} is not prepared.");
            }

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);

                var cmd = JsonConvert.DeserializeObject <T>(message);
                Console.WriteLine("[x] Receive New Task: {0}", cmd.CommandKey);
                Console.WriteLine("[x] Task Parameters: {0}", message);

                //执行命令操作
                instance.Execute(cmd);

                Console.WriteLine("[x] Task Completed");

                channel.BasicAck(ea.DeliveryTag, false);
            };

            channel.BasicConsume(queue: command.CommandKey, autoAck: false, consumer: consumer);
        }
예제 #36
0
        public void ResolveAbstractTypeThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Resolve<AbstractClass1>(), Throws.InstanceOf<ResolutionFailedException>());
        }
예제 #37
0
        public void ResolveCircularReferenceThrows()
        {
            var container = new InjectContainer();
            container.Register<IInterface1, CircularReference1>();
            container.Register<IInterface2, CircularReference2>();

            Assert.That(() => container.Resolve<IInterface1>(), Throws.InstanceOf<ResolutionFailedException>());
        }
예제 #38
0
        public void ResolveNonConcreteTypeThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Resolve<IInterface1>(), Throws.InstanceOf<ResolutionFailedException>());
        }
예제 #39
0
        public void ResolveNullTypeThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Resolve(null), Throws.ArgumentNullException);
        }
예제 #40
0
        public void ResolveStaticTypeThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Resolve(typeof(StaticClass)), Throws.InstanceOf<ResolutionFailedException>());
        }
예제 #41
0
        public void CanRegisterTypeAsSingleton()
        {
            var container = new InjectContainer();
            container.Register<IInterface1, Class1>();

            var instance1 = container.Resolve<IInterface1>();
            var instance2 = container.Resolve<IInterface1>();

            Assert.AreSame(instance1, instance2);
        }
예제 #42
0
        public void RegisterInstanceWithNullInstanceThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Register<object>(null), Throws.ArgumentNullException);
        }
예제 #43
0
        public void ResolvesConstructorParameters()
        {
            var container = new InjectContainer();
            container.Register<IInterfaceWithProperty, Class1WithProperty>();
            container.Register<IInterface2, Class2>();

            var instance = container.Resolve<IInterfaceWithProperty>();

            Assert.IsNotNull(instance);
            Assert.IsNotNull(instance.Arg);
        }
예제 #44
0
        public void CreatingNoPublicConstructorClassThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Resolve<NoConstructorClass>(), Throws.InstanceOf<ResolutionFailedException>());
        }
예제 #45
0
        public void RegisteredTypeDoesntInheritThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Register(typeof(IInterface1), typeof(Class2)), Throws.ArgumentException);
        }
예제 #46
0
        public void RegisterInstanceNullThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Register(null, new object()), Throws.ArgumentNullException);
        }
예제 #47
0
        public void CanResolveConcreteClassWithoutRegistering()
        {
            var container = new InjectContainer();
            var instance = container.Resolve<Class1>();

            Assert.IsNotNull(instance);
        }
예제 #48
0
        public void ResolvesInstanceAsSingleton()
        {
            var container = new InjectContainer();

            var instance = new Class1();

            container.Register<IInterface1>(instance);

            var instance1 = container.Resolve<IInterface1>();
            var instance2 = container.Resolve<IInterface1>();

            Assert.AreSame(instance, instance1);
            Assert.AreSame(instance, instance2);
        }
예제 #49
0
        public void RegisterTypeWithNullTypeThrows()
        {
            var container = new InjectContainer();

            Assert.That(() => container.Register(typeof(object), null), Throws.ArgumentNullException);
        }
예제 #50
0
        public void RegisterSameTypeThrows()
        {
            var container = new InjectContainer();
            container.Register<IInterface1, Class1>();

            Assert.That(() => container.Register<IInterface1, Class1>(), Throws.ArgumentException);
        }