Пример #1
0
        protected override void ConfigureApplicationContainer(ILifetimeScope existingContainer)
        {
            // Perform registration that should have an application lifetime
            existingContainer
            .RegisterNamedImplementation <IDataExecutor, CommonDataExecutor>("commondataex");
            existingContainer
            .RegisterNamedImplementation <IViewExecutor, CommonViewExecutor>("commonviewex");
            existingContainer
            .RegisterNamedImplementation <IViewExecutor, TaskListViewExecutor>("tasklistviewex");
            existingContainer
            .RegisterNamedImplementation <IViewExecutor, InstanceListViewExecutor>("instancelistviewex");
            existingContainer
            .RegisterSingleton <IPostMaster, PostMasterWork>();
            existingContainer
            .RegisterSingleton <ILogic, Logic>();
            existingContainer
            .RegisterImplementation <IRTask, RTask>();

            var repository = new Repository(ConfigurationManager.AppSettings["DBConnStr"]);

            existingContainer
            .RegisterInstance <IRepository, Repository>(repository);

            // Partial bootstrapper for private named implementations registration
            IPrivateBootstrapper privboots = this as IPrivateBootstrapper;

            if (privboots != null)
            {
                privboots
                .PrivateConfigureApplicationContainer(existingContainer);
            }

            #region ConfigureMonik

            var logSender = new AzureSender(
                ConfigurationManager.AppSettings["monikendpoint"],
                "incoming");

            existingContainer
            .RegisterInstance <IClientSender, AzureSender>(logSender);

            var monikSettings = new ClientSettings()
            {
                SourceName          = "ReportServer",
                InstanceName        = ConfigurationManager.AppSettings["InstanceName"],
                AutoKeepAliveEnable = true
            };

            existingContainer
            .RegisterInstance <IClientSettings, ClientSettings>(monikSettings);

            existingContainer
            .RegisterSingleton <IClientControl, MonikInstance>();

            #endregion

            #region ConfigureMapper

            var mapperConfig = new MapperConfiguration(cfg => cfg.AddProfile(typeof(MapperProfile)));
            // Hint: add to ctor if many profileSs needed: cfg.AddProfile(typeof(AutoMapperProfile));
            existingContainer.RegisterSingleInstance <MapperConfiguration, MapperConfiguration>(mapperConfig);
            var mapper = existingContainer.Resolve <MapperConfiguration>().CreateMapper();
            existingContainer.RegisterSingleInstance <IMapper, IMapper>(mapper);

            #endregion

            #region ConfigureCompressor

            var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                                    Environment.Is64BitProcess ? "x64" : "x86", "7z.dll");
            SevenZipBase.SetLibraryPath(path);
            var compressor = new SevenZipCompressor
            {
                CompressionMode = CompressionMode.Create,
                ArchiveFormat   = OutArchiveFormat.SevenZip
            };
            var archiver = new Archiver7Zip(compressor);
            existingContainer.RegisterSingleInstance <IArchiver, Archiver7Zip>(archiver);

            #endregion

            #region ConfigureBot

            Uri          proxyUri    = new Uri(ConfigurationManager.AppSettings["proxyUriAddr"]);
            ICredentials credentials = new NetworkCredential(ConfigurationManager.AppSettings["proxyLogin"],
                                                             ConfigurationManager.AppSettings["proxyPassword"]);
            WebProxy          proxy = new WebProxy(proxyUri, true, null, credentials);
            TelegramBotClient bot   = new TelegramBotClient(ConfigurationManager.AppSettings["BotToken"], proxy);
            existingContainer
            .RegisterSingleInstance <ITelegramBotClient, TelegramBotClient>(bot);

            #endregion

            existingContainer //why?
            .RegisterInstance <ILifetimeScope, ILifetimeScope>(existingContainer);
        }
        public static IContainer InitContainer()
        {
            var builder = new ContainerBuilder();

            builder.RegisterType <CachedServiceShell>()
            .As <IShell>()
            .SingleInstance();

            builder
            .RegisterType <MainWindow>()
            .As <IDockWindow>();

            builder
            .RegisterType <CachedService>()
            .As <ICachedService>()
            .SingleInstance();

            var context = new AuthenticationContext(new Domain0ClientScope(new HttpClient()))
            {
                HostUrl        = ConfigurationManager.AppSettings["BaseAuthUrl"],
                ShouldRemember = true
            };

            builder.RegisterInstance(context)
            .As <IAuthenticationContext>()
            .SingleInstance();

            ConfigureView <TaskManagerViewModel, TaskManagerView>(builder);

            ConfigureView <OperTemplatesManagerViewModel, OperTemplatesManagerView>(builder);

            ConfigureView <TaskEditorViewModel, TaskEditorView>(builder);

            ConfigureView <OperEditorViewModel, OperEditorView>(builder);

            ConfigureView <RecepientManagerViewModel, RecepientManagerView>(builder);

            ConfigureView <CronEditorViewModel, CronEditorView>(builder);

            ConfigureView <ScheduleManagerViewModel, ScheduleManagerView>(builder);

            ConfigureView <RecepientEditorViewModel, RecepientEditorView>(builder);

            ConfigureView <OperTemplatesListViewModel, OperTemplatesListView>(builder);

            #region monik

            var logSender = new AzureSender(
                ConfigurationManager.AppSettings["MonikEndpoint"],
                "incoming");

            builder.RegisterInstance(logSender)
            .As <IMonikSender>();

            var monikSettings = new ClientSettings
            {
                SourceName          = "ReportServer",
                InstanceName        = ConfigurationManager.AppSettings["MonikInstanceName"],
                AutoKeepAliveEnable = true
            };

            builder.RegisterInstance(monikSettings)
            .As <IMonikSettings>();

            builder
            .RegisterType <MonikClient>()
            .As <IMonik>()
            .SingleInstance();

            #endregion

            #region mapper

            var mapperConfig =
                new MapperConfiguration(cfg => cfg.AddProfile(typeof(MapperProfile)));

            builder.RegisterInstance(mapperConfig)
            .As <MapperConfiguration>()
            .SingleInstance();

            builder.Register(c => c.Resolve <MapperConfiguration>()
                             .CreateMapper())
            .As <IMapper>()
            .SingleInstance();

            #endregion

            var container = builder.Build();
            return(container);
        }
Пример #3
0
        protected override void ConfigureApplicationContainer(ILifetimeScope existingContainer)
        {
            RegisterNamedDataImporter <DbImporter, DbImporterConfig>
                (existingContainer, "CommonDbImporter");

            RegisterNamedDataImporter <ExcelImporter, ExcelImporterConfig>
                (existingContainer, "CommonExcelImporter");

            RegisterNamedDataImporter <CsvImporter, CsvImporterConfig>
                (existingContainer, "CommonCsvImporter");

            RegisterNamedDataImporter <SshImporter, SshImporterConfig>
                (existingContainer, "CommonSshImporter");

            //RegisterNamedDataImporter<HistoryImporter, HistoryImporterConfig>
            //    (existingContainer, "CommonHistoryImporter");

            RegisterNamedDataExporter <EmailDataSender, EmailExporterConfig>
                (existingContainer, "CommonEmailSender");

            RegisterNamedDataExporter <TelegramDataSender, TelegramExporterConfig>
                (existingContainer, "CommonTelegramSender");

            RegisterNamedDataExporter <DbExporter, DbExporterConfig>
                (existingContainer, "CommonDbExporter");

            RegisterNamedDataExporter <B2BExporter, B2BExporterConfig>
                (existingContainer, "CommonB2BExporter");

            RegisterNamedDataExporter <SshExporter, SshExporterConfig>
                (existingContainer, "CommonSshExporter");

            RegisterNamedDataExporter <FtpExporter, FtpExporterConfig>
                (existingContainer, "CommonFtpExporter");

            RegisterNamedViewExecutor <CommonViewExecutor>(existingContainer, "commonviewex");
            RegisterNamedViewExecutor <GroupedViewExecutor>(existingContainer, "GroupedViewex");
            RegisterNamedViewExecutor <CommonTableViewExecutor>(existingContainer,
                                                                "CommonTableViewEx");

            existingContainer
            .RegisterSingleton <ILogic, Logic>();
            existingContainer
            .RegisterImplementation <IReportTask, ReportTask.ReportTask>();

            // Partial bootstrapper for private named implementations registration
            (this as IPrivateBootstrapper)?
            .PrivateConfigureApplicationContainer(existingContainer);

            #region ConfigureMonik

            var logSender = new AzureSender(
                ConfigurationManager.AppSettings["monikendpoint"],
                "incoming");

            existingContainer
            .RegisterInstance <IMonikSender, AzureSender>(logSender);

            var monikSettings = new ClientSettings
            {
                SourceName          = "ReportServer",
                InstanceName        = ConfigurationManager.AppSettings["InstanceName"],
                AutoKeepAliveEnable = true
            };

            existingContainer
            .RegisterInstance <IMonikSettings, ClientSettings>(monikSettings);

            existingContainer
            .RegisterSingleton <IMonik, MonikClient>();

            #endregion

            var repository = new Repository(ConfigurationManager.AppSettings["DBConnStr"],
                                            existingContainer.Resolve <IMonik>());

            existingContainer
            .RegisterInstance <IRepository, Repository>(repository);

            #region ConfigureMapper

            var mapperConfig =
                new MapperConfiguration(cfg => cfg.AddProfile(typeof(MapperProfile)));

            // Hint: add to ctor if many profileSs needed: cfg.AddProfile(typeof(AutoMapperProfile));
            existingContainer.RegisterSingleInstance <MapperConfiguration, MapperConfiguration>(
                mapperConfig);
            var mapper = existingContainer.Resolve <MapperConfiguration>().CreateMapper();
            existingContainer.RegisterSingleInstance <IMapper, IMapper>(mapper);

            #endregion

            existingContainer.RegisterImplementation <IDefaultTaskExporter, DefaultTaskExporter>();


            existingContainer.RegisterNamedImplementation <IArchiver, ArchiverZip>("Zip");
            existingContainer.RegisterNamedImplementation <IArchiver, Archiver7Zip>("7Zip");

            switch (ConfigurationManager.AppSettings["ArchiveFormat"])
            {
            case "Zip":
                existingContainer.RegisterImplementation <IArchiver, ArchiverZip>();
                break;

            case "7Zip":
                existingContainer.RegisterImplementation <IArchiver, Archiver7Zip>();
                break;
            }


            existingContainer.RegisterImplementation <IReportTaskRunContext, ReportTaskRunContext>();

            existingContainer.RegisterImplementation <ITaskWorker, TaskWorker>();

            existingContainer.RegisterImplementation <IPackageBuilder, ProtoPackageBuilder>();
            existingContainer.RegisterImplementation <IPackageParser, ProtoPackageParser>();

            existingContainer.RegisterImplementation <IProtoSerializer, ProtoSerializer>();

            #region ConfigureBot

            Uri          proxyUri    = new Uri(ConfigurationManager.AppSettings["proxyUriAddr"]);
            ICredentials credentials = new NetworkCredential(
                ConfigurationManager.AppSettings["proxyLogin"],
                ConfigurationManager.AppSettings["proxyPassword"]);
            WebProxy          proxy = new WebProxy(proxyUri, true, null, credentials);
            TelegramBotClient bot   =
                new TelegramBotClient(ConfigurationManager.AppSettings["BotToken"], proxy);
            existingContainer
            .RegisterSingleInstance <ITelegramBotClient, TelegramBotClient>(bot);

            #endregion

            existingContainer //why?
            .RegisterInstance <ILifetimeScope, ILifetimeScope>(existingContainer);

            existingContainer.RegisterInstance <TokenValidationSettings, TokenValidationSettings>(
                new TokenValidationSettings
            {
                Audience = ConfigurationManager.AppSettings["Token_Audience"],
                Issuer   = ConfigurationManager.AppSettings["Token_Issuer"],
                Keys     = new[]
                {
                    new KeyInfo
                    {
                        Key = ConfigurationManager.AppSettings["Token_Secret"],
                        Alg = ConfigurationManager.AppSettings["Token_Alg"]
                    }
                }
            });
        }