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); } } } }