public CyberPlatSignatureManager(CyberPlatSignatureManagerConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            m_Configuration = configuration;

            IPriv.Initialize();

            checkKeys(); // Fail-fast
        }
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.AddFacility <LoggingFacility>(f => f.LogUsing <NLogFactory>().WithConfig("NLog.config"));

            container.Register(
                Component.For <HttpMessageHandler>().ImplementedBy <LoggingHttpHandler>()
                );

            container.Register(
                Component.For <ICyberPlatGate>().ImplementedBy <CyberPlatGate.CyberPlatGate>(),
                Component.For <ICyberPlatHttpClient>().ImplementedBy <CyberPlatHttpClient>(),
                Component.For <ICyberPlatSignatureManager>().ImplementedBy <CyberPlatSignatureManager>()
                );

            // Configurations
            var gateConf = new CyberPlatGateConfiguration()
            {
                AP       = AppSettings.AP,
                SD       = AppSettings.SD,
                OP       = AppSettings.OP,
                PAY_TOOL = AppSettings.PAY_TOOL,
                TERM_ID  = AppSettings.TERM_ID,
                NO_ROUTE = AppSettings.NO_ROUTE,
            };
            var clientConf = new CyberPlatHttpClientConfiguration()
            {
                CheckUrl   = AppSettings.CheckUrl,
                PayUrl     = AppSettings.PayUrl,
                StatusUrl  = AppSettings.StatusUrl,
                TimeoutSec = AppSettings.TimeoutSec,
            };
            var managerConf = new CyberPlatSignatureManagerConfiguration()
            {
                PublicKeyPath     = AppSettings.PublicKeyPath,
                SecretKeyPath     = AppSettings.SecretKeyPath,
                PublicKeySerial   = AppSettings.PublicKeySerial,
                SecretKeyPassword = AppSettings.SecretKeyPassword,
            };

            container.Register(
                Component.For <CyberPlatGateConfiguration>().Instance(gateConf),
                Component.For <CyberPlatHttpClientConfiguration>().Instance(clientConf),
                Component.For <CyberPlatSignatureManagerConfiguration>().Instance(managerConf)
                );
        }