public void Compile <T>(Type interfaceType, BaseServiceInfo serviceMeta, Func <Type, Type, ServiceRegister, ServiceState, Expression> createConstructorExpression) where T : class
        {
            if (serviceMeta.Activator == null)
            {
                lock (serviceMeta.SyncObject)
                {
                    if (serviceMeta.Activator == null)
                    {
                        var registrar = serviceMeta.InitNewRegister(interfaceType, _notifier);

                        Func <T> serviceCreator = serviceMeta.GetServiceInstanceCallback <T>();
                        if (serviceCreator == null)
                        {
                            var        state         = new ServiceState(); /*Root place for service state instance*/
                            Expression newExpression = createConstructorExpression(interfaceType, serviceMeta.ServiceType, registrar, state);

                            var blockExpression = BuildExpression(state, newExpression);

                            //Set Activator
                            serviceCreator = Expression.Lambda <Func <T> >(blockExpression).Compile();
                        }
                        serviceMeta.Activator = new ServiceActivator <T>(serviceCreator, serviceMeta.IsReusable);
                    }
                }
            }
        }