public void ReleaseService(
            TisServiceKey oServiceKey,
            ITisServiceInfo serviceInfo = null,
            object oService             = null)
        {
            if (oService == null && IsInstantiated(oServiceKey))
            {
                oService = GetService(oServiceKey);
            }

            if (oService != null)
            {
                if (serviceInfo != null)
                {
                    TisServiceEventsAdapterBuilder.ReleaseService(serviceInfo, oService);
                }

                PerformReleaseService(oServiceKey);

                PerformDisposeService(oService);
            }

            // Fire post-deactivate event
            FirePostServiceDeactivate(oServiceKey);

            int nIndex;

            nIndex = m_oServicesLoadOrder.IndexOf(oServiceKey);

            if (nIndex >= 0)
            {
                m_oServicesLoadOrder.RemoveAt(nIndex);
            }
        }
        private void LifetimeManager_OnPostServiceActivate(
            string sAppName,
            TisServiceKey oServiceKey,
            object oService)
        {
            ITisServiceInfo serviceInfo = oServiceKey.ServiceInfo;

            if (serviceInfo.SupportedEvents.Count > 0)
            {
                TisServiceEventsAdapterBuilder.AddService(
                    this,
                    sAppName,
                    oService,
                    serviceInfo,
                    oServiceKey.InstanceName);
            }

            if (OnPostServiceActivate != null)
            {
                OnPostServiceActivate(sAppName, oServiceKey);
            }
        }
        public bool AddLocalService(
            string applicationName,
            string serviceName,
            object serviceInstance        = null,
            string serviceCreatorFullName = null,
            string serviceTypeFullName    = null,
            string serviceInstanceName    = null)
        {
            if (!StringUtil.IsStringInitialized(serviceName))
            {
                Log.WriteWarning("Try to install service without name.");
                return(false);
            }

            ITisServiceRegistry applicationServiceRegistry = GetServiceRegistry(applicationName);

            bool isServiceInstalled = applicationServiceRegistry.IsServiceInstalled(serviceName);

            if (!isServiceInstalled)
            {
                if (!StringUtil.IsStringInitialized(serviceCreatorFullName))
                {
                    serviceCreatorFullName =
                        typeof(TisUniversalServiceCreator).FullName + "," +
                        typeof(TisUniversalServiceCreator).Assembly.GetName().Name;
                }

                if (!StringUtil.IsStringInitialized(serviceTypeFullName))
                {
                    serviceTypeFullName = String.Empty;
                }

                try
                {
                    applicationServiceRegistry.InstallService(
                        serviceName,
                        serviceCreatorFullName,
                        serviceTypeFullName,
                        TisServicesConst.NO_ROLES_REQUIRED,
                        false);
                }
                catch (Exception exc)
                {
                    Log.WriteWarning("Failed to install service [{0}]. Details : {1}", serviceName, exc.Message);
                }

                isServiceInstalled = applicationServiceRegistry.IsServiceInstalled(serviceName);
            }

            if (serviceInstance != null)
            {
                if (!StringUtil.IsStringInitialized(serviceInstanceName))
                {
                    serviceInstanceName = TisServicesConst.UNNAMED_INSTANCE;
                }

                TisServiceKey serviceKey = new TisServiceKey(
                    serviceName,
                    serviceInstanceName);

                ITisServiceProvider serviceProvider;

                serviceProvider = m_oServiceProvidersCache.GetServiceProvider(applicationName);

                serviceProvider.AddService(serviceKey, serviceInstance);

                ITisServiceInfo serviceInfo =
                    CheckedGetServiceInfo(applicationName, serviceName);

                // The events adapter will include only the services which implement ITisSupportEvents interface.
                TisServiceEventsAdapterBuilder.AddService(
                    this,
                    applicationName,
                    serviceInstance,
                    serviceInfo,
                    serviceInstanceName);
            }

            return(isServiceInstalled);
        }