/// <summary>
        /// Constructor
        /// </summary>
        /// <param name="ServiceDependencyType"><see cref="AppBlocksServiceDependencyType"/> type. Service can be
        /// <see cref="AppBlocksServiceDependencyType.Live"/> or <see cref="AppBlocksServiceDependencyType.NonLive"/></param>
        /// <param name="Name">Service name</param>
        /// <param name="ServiceType">Type implemented</param>
        /// <param name="ServiceScope"><see cref="AppBlocksInstanceLifetime"/> lifetime scope</param>
        /// <param name="Interceptors">Service interceptors</param>
        /// <param name="Workflows">Type workflow writers</param>
        /// <param name="IsKeyed"><c>true</c> if service is keyed; otherwise <c>false</c></param>
        public AppBlocksServiceAttribute(
            AppBlocksServiceDependencyType ServiceDependencyType =
            AppBlocksServiceDependencyType.NonLive,
            string Name      = "",
            Type ServiceType = null,
            AppBlocksInstanceLifetime ServiceScope =
            AppBlocksInstanceLifetime.InstancePerLifetimeScope,
            string[] Interceptors = null,
            string[] Workflows    = null,
            bool IsKeyed          = false) : base(ServiceDependencyType, ServiceScope)
        {
            this.Name         = Name;
            this.ServiceType  = ServiceType;
            this.Interceptors =
                Interceptors ?? new[]
            {
                AppBlocksInterceptorConstants.Logging,
                AppBlocksInterceptorConstants.Validation
            };
            this.Workflows = Workflows;
            this.IsKeyed   = IsKeyed;

            //Keyed services must define service type
            if (IsKeyed && ServiceType == null)
            {
                throw new ArgumentException("Keyed services must define service type");
            }
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="Name">Service</param>
 /// <param name="ServiceType">Type implemented</param>
 /// <param name="ServiceScope"><see cref="AppBlocksInstanceLifetime"/> lifetime scope</param>
 /// <param name="Interceptors">Service interceptors</param>
 /// <param name="Workflows">Type workflow writers</param>
 /// <param name="IsKeyed">Service is keyed</param>
 public AppBlocksLiveServiceAttribute(
     string Name      = "",
     Type ServiceType = null,
     AppBlocksInstanceLifetime ServiceScope =
     AppBlocksInstanceLifetime.InstancePerLifetimeScope,
     string[] Interceptors = null,
     string[] Workflows    = null,
     bool IsKeyed          = false) :
     base(AppBlocksServiceDependencyType.Live, Name, ServiceType, ServiceScope, Interceptors, Workflows, IsKeyed)
 {
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="Name">Service name</param>
 /// <param name="ServiceDependencyType"><see cref="AppBlocksServiceDependencyType"/> type. Service can be
 /// <see cref="AppBlocksServiceDependencyType.Live"/> or <see cref="AppBlocksServiceDependencyType.NonLive"/></param>
 /// <param name="ServiceType">Type implemented</param>
 /// <param name="ServiceScope"><see cref="AppBlocksInstanceLifetime"/> lifetime scope</param>
 /// <param name="Interceptors">Service interceptors</param>
 /// <param name="Workflows">Type workflow writers</param>
 public AppBlocksNamedServiceAttribute(
     string Name,
     AppBlocksServiceDependencyType ServiceDependencyType =
     AppBlocksServiceDependencyType.NonLive,
     Type ServiceType = null,
     AppBlocksInstanceLifetime ServiceScope =
     AppBlocksInstanceLifetime.InstancePerLifetimeScope,
     string[] Interceptors = null,
     string[] Workflows    = null) : base(
         ServiceDependencyType,
         Name,
         ServiceType,
         ServiceScope,
         Interceptors,
         Workflows,
         false)
 {
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="ServiceDependencyType"><see cref="AppBlocksServiceDependencyType"/> type. Service can be
 /// <see cref="AppBlocksServiceDependencyType.Live"/> or <see cref="AppBlocksServiceDependencyType.NonLive"/></param>
 /// <param name="ServiceScope"><see cref="AppBlocksInstanceLifetime"/> lifetime scope</param>
 public AppBlocksServiceBaseAttribute(AppBlocksServiceDependencyType ServiceDependencyType,
                                      AppBlocksInstanceLifetime ServiceScope)
 {
     this.ServiceDependencyType = ServiceDependencyType;
     this.ServiceScope          = ServiceScope;
 }