Example #1
0
 private static void SetObjectSetting(ObjectServiceBase objectService, IObjectSetting objectSetting, object instance)
 {
     if(objectSetting.SettingSet == null || string.IsNullOrEmpty(objectSetting.SettingSet.TypeName)) {
         return;
     }
     var typeName = objectService.GetTypeNameInternal(objectSetting.SettingSet.TypeName, objectSetting.Namespace);
     var setting = (IConfigSettingElement)TypeHelper.CreateObject(typeName, typeof(IConfigSettingElement), false);
     setting = GetSetting(objectService, objectSetting, setting);
     if (setting == null) {
         return;
     }
     if (instance is ISettingRequired) {
         ((ISettingRequired)instance).Setting = setting;
     }
     var settingType = setting.GetType();
     var iinitializableType = typeof (IInitializable<>).MakeGenericType(settingType);
     if (iinitializableType.IsInstanceOfType(instance)) {
         var mi = iinitializableType.GetMethod("Init");
         object returnValue;
         TypeHelper.TryInvoke(instance, mi, out returnValue, false, setting);
     }
     var isettingRequiredType = typeof(ISettingRequired<>).MakeGenericType(settingType);
     if(isettingRequiredType.IsInstanceOfType(instance)) {
         var property = isettingRequiredType.GetProperty("Setting");
         try {
             property.SetValue(instance, setting, null);
         } catch { }
     }
 }
Example #2
0
        protected override void Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
        {
            base.Init(objectSetting, objectBuilder);
            var setting     = objectSetting.ConfigSetting;
            var poolSetting = (IPoolLifetimeContainerSetting)setting.ToCachedSetting <PoolLifetimeContainerSetting>("pooling");

            if (poolSetting != null)
            {
                this.Enabled     = poolSetting.Enabled;
                this.Debug       = poolSetting.Debug;
                this.MaxPoolSize = poolSetting.MaxPoolSize;
            }
            var maxPoolSize = this.MaxPoolSize;

            if (maxPoolSize == 0 || !this.Enabled)
            {
                this.MaxPoolSize = maxPoolSize;
                this.Enabled     = false;
                return;
            }
            if (maxPoolSize < 0)
            {
                maxPoolSize = int.MaxValue;
                this.Free   = new Stack();
                this.Busy   = new HashSet <object>();
            }
            else
            {
                this.Free = new Stack(maxPoolSize);
                this.Busy = new HashSet <object>();
            }
            this.MaxPoolSize = maxPoolSize;
        }
            protected virtual object CreateObject(IObjectSetting objectSetting, IDictionary items, params object[] args)
            {
                var ctx      = new ObjectBuilderContext(this, objectSetting, items);
                var instance = this.OnObjectCreating(ctx);

                if (instance != null)
                {
                    return(instance);
                }

                var mapTo = objectSetting.MapTo;

                if (string.IsNullOrEmpty(mapTo))
                {
                    mapTo = objectSetting.TypeName;
                }
                mapTo    = this.ObjectService.GetTypeNameInternal(mapTo, objectSetting.Namespace);
                instance = TypeHelper.CreateObject(mapTo, null, true, args);
                if (instance != null)
                {
                    ctx.ObjectInstance = instance;
                    this.OnObjectCreated(ctx);
                }
                return(instance);
            }
Example #4
0
 /// <summary>
 /// 构造
 /// </summary>
 public ObjectBuildContext(IServiceLocator serviceLocator, IObjectSetting objectSetting, IObjectBuilder objectBuilder, IDictionary items)
     : base(items)
 {
     this.ServiceLocator = serviceLocator;
     this.ObjectSetting = objectSetting;
     this.ObjectBuilder = objectBuilder;
 }
Example #5
0
 protected override void Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
 {
     base.Init(objectSetting, objectBuilder);
     var setting = objectSetting.ConfigSetting;
     var poolSetting = (IPoolLifetimeContainerSetting)setting.ToCachedSetting<PoolLifetimeContainerSetting>("pooling");
     if (poolSetting != null) {
         this.Enabled = poolSetting.Enabled;
         this.Debug = poolSetting.Debug;
         this.MaxPoolSize = poolSetting.MaxPoolSize;
     }
     var maxPoolSize = this.MaxPoolSize;
     if(maxPoolSize == 0 || !this.Enabled) {
         this.MaxPoolSize = maxPoolSize;
         this.Enabled = false;
         return;
     }
     if(maxPoolSize < 0) {
         maxPoolSize = int.MaxValue;
         this.Free = new Stack();
         this.Busy = new HashSet<object>();
     } else {
         this.Free = new Stack(maxPoolSize);
         this.Busy = new HashSet<object>();
     }
     this.MaxPoolSize = maxPoolSize;
 }
Example #6
0
        public object CreateObject(IObjectSetting setting, params object[] parameters)
        {
            if (setting == null)
            {
                return(null);
            }
            var typeName   = ObjectService.GetTypeName(setting.TypeName);
            var objectType = TypeHelper.CreateType(typeName, false);

            if (objectType == null)
            {
                return(null);
            }
            if (!typeof(IEventStorageInternal).IsAssignableFrom(objectType))
            {
                throw new Exception("Create Redis Event Storage Only.");
            }
            var storage = (IEventStorageInternal)ObjectService.Current.ObjectBuilder.CreateObject((HTB.DevFx.Core.Config.IObjectSetting)setting, parameters);

            if (storage == null)
            {
                return(null);
            }
            storage.ConnectionStringName = setting.Name;
            return(storage);
        }
Example #7
0
        public object CreateObject(IObjectSetting setting, Type objectType, string uri, params object[] parameters)
        {
            var factoryType         = typeof(ChannelFactory <>).MakeGenericType(objectType);
            var methodCreateChannel = factoryType.GetMethod("CreateChannel", BindingFlags.Public | BindingFlags.Static, null, new[] { typeof(Binding), typeof(EndpointAddress) }, null);

            return(methodCreateChannel.Invoke(null, new object[] { CreateBinding(setting, uri), new EndpointAddress(uri) }));
        }
Example #8
0
        private static Binding CreateBinding(IObjectSetting setting, string url)
        {
            string bindingName = null;
            var    bc          = setting.ConfigSetting["binding"];

            if (bc != null)
            {
                bindingName = bc.Value.Value;
            }
            if (string.IsNullOrEmpty(bindingName))
            {
                var uri = new Uri(url, UriKind.Absolute);
                bindingName = uri.Scheme;
            }
            if (string.IsNullOrEmpty(bindingName))
            {
                throw new RemotingException("Binding not found");
            }
            var binding = ObjectService.GetObject <Binding>("Wcf." + bindingName);

            if (binding == null)
            {
                throw new RemotingException("Binding not found");
            }
            return(binding);
        }
Example #9
0
        private static void SetObjectSetting(IServiceLocator serviceLocator, IObjectSetting objectSetting, object instance)
        {
            var settingSet = objectSetting.SettingSet;
            IConfigSettingElement setting;

            if (settingSet == null || string.IsNullOrEmpty(settingSet.TypeName))
            {
                return;
            }
            var typeName = serviceLocator.GetTypeName(settingSet.TypeName);

            if (instance is ISettingRequired)
            {
                setting = (IConfigSettingElement)TypeHelper.CreateObject(typeName, typeof(IConfigSettingElement), false);
                if (setting != null)
                {
                    setting.ConfigSetting = GetCustomSetting(objectSetting);
                    ((ISettingRequired)instance).Setting = setting;
                }
                return;
            }
            var  currentType = instance.GetType();
            Type initorType = null, requiredType = null;

            try {
                initorType   = currentType.GetInterface(typeof(IInitializable <>).FullName);
                requiredType = currentType.GetInterface(typeof(ISettingRequired <>).FullName);
            } catch (AmbiguousMatchException) { }
            var type = initorType ?? requiredType;

            if (type == null)
            {
                return;
            }
            var settingType         = type.GetGenericArguments()[0];
            var settingInstanceType = TypeHelper.CreateType(typeName, settingType, false);

            if (settingInstanceType == null)
            {
                return;
            }
            setting = (IConfigSettingElement)TypeHelper.CreateObject(settingInstanceType, typeof(IConfigSettingElement), false);
            if (setting == null)
            {
                return;
            }
            setting.ConfigSetting = GetCustomSetting(objectSetting);
            if (type == initorType)
            {
                TypeHelper.Invoke(instance, "Init", setting);
            }
            else
            {
                TypeHelper.SetPropertyValue(instance, "Setting", setting);
            }
        }
Example #10
0
 protected internal virtual IConfigSetting GetObjectSettingInternal(IObjectSetting objectSetting)
 {
     if (objectSetting != null)
     {
         var settingSet  = objectSetting.SettingSet;
         var settingName = settingSet != null ? settingSet.Name : ObjectSettingConfigPropertyName;
         return(objectSetting.ConfigSetting.GetChildSetting(settingName));
     }
     return(null);
 }
Example #11
0
 /// <summary>
 /// 获取定制后的配置节
 /// </summary>
 /// <param name="objectSetting">对象配置信息</param>
 /// <returns>定制后的配置节</returns>
 public static IConfigSetting GetCustomSetting(IObjectSetting objectSetting)
 {
     if (objectSetting != null)
     {
         var settingSet  = objectSetting.SettingSet;
         var settingName = settingSet != null ? settingSet.Name : "setting";
         return(objectSetting.ConfigSetting.GetChildSetting(settingName));
     }
     return(null);
 }
Example #12
0
 private static IConfigSettingElement GetSetting(ObjectServiceBase objectService, IObjectSetting objectSetting, IConfigSettingElement setting)
 {
     setting.ConfigSetting = objectService.GetObjectSettingInternal(objectSetting);
     var handlerName = objectSetting.SettingSet.Value;
     if(!string.IsNullOrEmpty(handlerName)) {
         var handler = objectService.GetOrCreateObject<ISettingHandler>(handlerName);
         if(handler != null) {
             setting = handler.GetSetting(setting);
         }
     }
     return setting;
 }
Example #13
0
        public object CreateObject(IObjectSetting setting, Type objectType, string uri, params object[] parameters)
        {
            var proxy       = ObjectService.CreateObject <IHttpRealProxy>(objectType, uri);
            var contentType = setting.ConfigSetting.Property.TryGetPropertyValue("contentType");

            if (!string.IsNullOrEmpty(contentType))
            {
                proxy.ContentType = contentType;
            }
            proxy.Init();
            return(proxy.GetTransparentProxy());
        }
Example #14
0
        public object CreateObject(IObjectSetting setting, params object[] parameters)
        {
            if (setting == null)
            {
                return(null);
            }
            IRemotingObjectBuilder builder = null;
            var typeName   = ServiceLocator.GetTypeName(setting.TypeName);
            var objectType = TypeHelper.CreateType(typeName, false);

            if (objectType == null)
            {
                return(null);
            }
            var uri             = setting.MapTo;
            var remotingSetting = SettingRequiredExtender.ToCustomSetting <RemotingObjectBuilderSetting>(setting);

            if (remotingSetting != null)
            {
                if (!string.IsNullOrEmpty(remotingSetting.BuilderType))
                {
                    builder = ServiceLocator.GetService <IRemotingObjectBuilder>(remotingSetting.BuilderType);
                }
                if (!string.IsNullOrEmpty(remotingSetting.Uri))
                {
                    uri = remotingSetting.Uri;
                }
            }
            object instance = null;

            if (builder == null)
            {
                if (!string.IsNullOrEmpty(uri))
                {
                    var index = uri.LastIndexOf('.');
                    if (index > 0)
                    {
                        var handlerName = uri.Substring(index).ToLower();
                        this.builders.TryGetValue(handlerName, out builder);
                    }
                }
            }
            if (builder == null)
            {
                builder = this.defaultBuilder;
            }
            if (builder != null)
            {
                instance = builder.CreateObject(setting, objectType, uri, parameters);
            }
            return(instance);
        }
Example #15
0
        /// <summary>
        /// 转换成定制后的强类型配置节
        /// </summary>
        /// <typeparam name="T">强类型配置类型</typeparam>
        /// <param name="objectSetting">对象配置信息</param>
        /// <returns>强类型配置节</returns>
        public static T ToCustomSetting <T>(IObjectSetting objectSetting)
        {
            var setting = GetCustomSetting(objectSetting);

            if (setting != null)
            {
                var settingInstance = (IConfigSettingElement)TypeHelper.CreateObject(typeof(T), typeof(IConfigSettingElement), false);
                if (settingInstance != null)
                {
                    settingInstance.ConfigSetting = setting;
                    return((T)settingInstance);
                }
            }
            return(default(T));
        }
            protected virtual void CheckObjectSettingDependencies(IObjectSetting objectSetting)
            {
                bool state;

                if (!this.ObjectSettingDependencies.TryGetValue(objectSetting, out state))
                {
                    lock (this.ObjectSettingDependencies) {
                        if (!this.ObjectSettingDependencies.TryGetValue(objectSetting, out state))
                        {
                            state = this.CheckObjectSettingDependencies(objectSetting, new List <IObjectSetting>());
                        }
                    }
                }
                if (!state)
                {
                    throw new ConfigException("对象依赖进入死循环,请检查配置");
                }
            }
Example #17
0
 private static Binding CreateBinding(IObjectSetting setting, string url)
 {
     string bindingName = null;
     var bc = setting.ConfigSetting["binding"];
     if(bc != null) {
         bindingName = bc.Value.Value;
     }
     if(string.IsNullOrEmpty(bindingName)) {
         var uri = new Uri(url, UriKind.Absolute);
         bindingName = uri.Scheme;
     }
     if(string.IsNullOrEmpty(bindingName)) {
         throw new RemotingException("Binding not found");
     }
     var binding = ObjectService.GetObject<Binding>("Wcf." + bindingName);
     if(binding == null) {
         throw new RemotingException("Binding not found");
     }
     return binding;
 }
Example #18
0
        /// <summary>
        /// 获取定制后的强类型配置节
        /// </summary>
        /// <typeparam name="T">强类型配置类型</typeparam>
        /// <param name="objectSetting">对象配置信息</param>
        /// <returns>强类型配置节</returns>
        public static T GetCustomSetting <T>(IObjectSetting objectSetting)
        {
            var setting = GetCustomSetting(objectSetting);

            if (setting != null)
            {
                var settingSet = objectSetting.SettingSet;
                var typeName   = ServiceLocator.GetTypeName(settingSet.TypeName);
                var type       = TypeHelper.CreateType(typeName, typeof(T), false);
                if (type != null)
                {
                    var settingInstance = (IConfigSettingElement)TypeHelper.CreateObject(type, typeof(IConfigSettingElement), false);
                    if (settingInstance != null)
                    {
                        settingInstance.ConfigSetting = setting;
                        return((T)settingInstance);
                    }
                }
            }
            return(default(T));
        }
Example #19
0
            private object GetObject(IObjectSetting setting, Type expectedType)
            {
                var            builderName = setting.Builder;
                IObjectBuilder builder     = null;

                if (!string.IsNullOrEmpty(builderName))
                {
                    builder = this.GetServiceInternal <IObjectBuilder>(builderName);
                }
                var ctx = new ObjectBuildContext(this, setting, builder, null);

                this.OnObjectBuilding(ctx);
                if (ctx.ObjectInstance == null && builder != null)
                {
                    ctx.ObjectInstance = builder.CreateObject(setting);
                }
                if (ctx.ObjectInstance == null)
                {
                    var mapTo = this.GetTypeNameInternal(setting.MapTo);
                    if (!string.IsNullOrEmpty(mapTo))
                    {
                        ctx.ObjectInstance = TypeHelper.CreateObject(mapTo, expectedType, true);
                    }
                    else
                    {
                        var typeName = this.GetTypeNameInternal(setting.TypeName);
                        if (!string.IsNullOrEmpty(typeName))
                        {
                            ctx.ObjectInstance = TypeHelper.CreateObject(typeName, expectedType, true);
                        }
                        else
                        {
                            throw new ConfigException("type attribute is required in <object />");
                        }
                    }
                }
                this.OnObjectBuilt(ctx);
                return(ctx.ObjectInstance);
            }
Example #20
0
            private static void SetObjectSetting(ObjectServiceBase objectService, IObjectSetting objectSetting, object instance)
            {
                if (objectSetting.SettingSet == null || string.IsNullOrEmpty(objectSetting.SettingSet.TypeName))
                {
                    return;
                }
                var typeName = objectService.GetTypeNameInternal(objectSetting.SettingSet.TypeName, objectSetting.Namespace);
                var setting  = (IConfigSettingElement)TypeHelper.CreateObject(typeName, typeof(IConfigSettingElement), false);

                setting = GetSetting(objectService, objectSetting, setting);
                if (setting == null)
                {
                    return;
                }
                if (instance is ISettingRequired)
                {
                    ((ISettingRequired)instance).Setting = setting;
                }
                var settingType        = setting.GetType();
                var iinitializableType = typeof(IInitializable <>).MakeGenericType(settingType);

                if (iinitializableType.IsInstanceOfType(instance))
                {
                    var    mi = iinitializableType.GetMethod("Init");
                    object returnValue;
                    TypeHelper.TryInvoke(instance, mi, out returnValue, false, setting);
                }
                var isettingRequiredType = typeof(ISettingRequired <>).MakeGenericType(settingType);

                if (isettingRequiredType.IsInstanceOfType(instance))
                {
                    var property = isettingRequiredType.GetProperty("Setting");
                    try {
                        property.SetValue(instance, setting, null);
                    } catch { }
                }
            }
Example #21
0
 public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting, IDictionary items) : base(items)
 {
     this.ObjectBuilder = objectBuilder;
     this.ObjectSetting = objectSetting;
 }
Example #22
0
 public object CreateObject(IObjectSetting setting, Type objectType, string uri, params object[] parameters)
 {
     return Activator.GetObject(objectType, uri);
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting)
 {
     return this.CreateObject(objectSetting, null);
 }
Example #24
0
 /// <summary>
 /// 构造
 /// </summary>
 public ObjectBuildContext(IServiceLocator serviceLocator, IObjectSetting objectSetting, IObjectBuilder objectBuilder, IDictionary items) : base(items)
 {
     this.ServiceLocator = serviceLocator;
     this.ObjectSetting  = objectSetting;
     this.ObjectBuilder  = objectBuilder;
 }
Example #25
0
        private static TSetting GetObjectTypedSetting <TSetting>(this IObjectService objectService, IObjectSetting objectSetting) where TSetting : class
        {
            if (objectSetting == null)
            {
                return(null);
            }
            var osb = (ObjectServiceBase)objectService;

            if (objectSetting.SettingSet != null && !string.IsNullOrEmpty(objectSetting.SettingSet.TypeName))
            {
                var typeName            = osb.GetTypeNameInternal(objectSetting.SettingSet.TypeName, objectSetting.Namespace);
                var settingType         = typeof(TSetting);
                var settingInstanceType = TypeHelper.CreateType(typeName, settingType, false);
                if (settingInstanceType != null)
                {
                    var setting = (IConfigSettingElement)TypeHelper.CreateObject(settingInstanceType, typeof(IConfigSettingElement), false);
                    if (setting != null)
                    {
                        setting.ConfigSetting = osb.GetObjectSettingInternal(objectSetting);
                        return((TSetting)setting);
                    }
                }
            }
            return(null);
        }
Example #26
0
        internal static ObjectDescription CreateFromSetting(IObjectService objectService, Type objectType, IObjectSetting setting)
        {
            var description = new ObjectDescription(objectType);
            var parameters  = setting.ConstructorParameters;

            if (parameters != null && parameters.Length > 0)
            {
                description.ConstructorParameters = parameters.Select(x => {
                    var value = new ValueDescription {
                        Name  = x.Name,
                        Type  = objectService.GetOrCreateType(x.TypeName),
                        Value = x.Value
                    };
                    return((IValueDescription)value);
                }).ToArray();
            }
            var properties = setting.Properties;

            if (properties != null && properties.Length > 0)
            {
                description.Properties = properties.Select(x => {
                    var value = new ValueDescription {
                        Name  = x.Name,
                        Type  = objectService.GetOrCreateType(x.TypeName),
                        Value = x.Value
                    };
                    return((IValueDescription)value);
                }).ToArray();
            }
            return(description);
        }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting)
 {
     return(this.CreateObject(objectSetting, null));
 }
Example #28
0
 protected virtual void Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
 {
     this.ObjectSetting = objectSetting;
     this.ObjectBuilder = objectBuilder;
 }
Example #29
0
 public object CreateObject(IObjectSetting setting, Type objectType, string uri, params object[] parameters)
 {
     return(Activator.GetObject(objectType, uri));
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, params object[] args)
 {
     return(this.CreateObject(objectSetting, null, args));
 }
            protected virtual object CreateObject(IObjectSetting objectSetting, IDictionary items)
            {
                var ctx = new ObjectBuilderContext(this, objectSetting, items);
                var instance = this.OnObjectCreating(ctx);
                if(instance != null) {
                    return instance;
                }

                this.CheckObjectSettingDependencies(objectSetting);

                var builderType = objectSetting.Builder;
                if (!string.IsNullOrEmpty(builderType)) {
                    var builder = (Esb.IObjectBuilder)this.ObjectService.GetObjectInternal(builderType, objectSetting.Namespace, typeof(Esb.IObjectBuilder), ctx.Items);
                    if (builder != null) {
                        instance = builder.CreateObject(objectSetting);
                        if(instance != null) {
                            goto EXIT;
                        }
                    }
                }

                var spaceName = objectSetting.Namespace;
                if (objectSetting.Dependencies != null && objectSetting.Dependencies.Length > 0) {
                    foreach (var dependencySetting in objectSetting.Dependencies) {
                        var value = dependencySetting.Name;
                        this.ObjectService.GetObjectInternal(value, spaceName, null, items);
                    }
                }

                var mapTo = objectSetting.MapTo;
                if (string.IsNullOrEmpty(mapTo)) {
                    mapTo = objectSetting.TypeName;
                } else {
                    instance = this.ObjectService.GetObjectInternal(mapTo, spaceName, null, items);
                    if(instance != null) {
                        return instance;
                    }
                }
                mapTo = this.ObjectService.GetTypeNameInternal(mapTo, spaceName);

                var constructor = objectSetting.Constructor;
                if (constructor != null) {
                    var parameters = constructor.Parameters;
                    if(parameters != null) {
                        var length = parameters.Length;
                        if(length > 0) {
                            var types = new Type[length];
                            var values = new object[length];
                            for(var i = 0; i < parameters.Length; i++) {
                                var parameter = parameters[i];
                                var typeName = this.ObjectService.GetTypeNameInternal(parameter.TypeName, spaceName);
                                var type = TypeHelper.CreateType(typeName, true);
                                types[i] = type;
                                var valueString = parameter.Value;
                                var value = this.ObjectService.GetObjectInternal(valueString, spaceName, type, items);
                                values[i] = value;
                            }
                            instance = TypeHelper.CreateObject(mapTo, null, true, types, values);
                        }
                    }
                }

                if(instance == null) {
                    instance = TypeHelper.CreateObject(mapTo, null, true);
                }

                if(instance != null && objectSetting.Properties != null && objectSetting.Properties.Length > 0) {
                    foreach (var property in objectSetting.Properties) {
                        var typeName = this.ObjectService.GetTypeNameInternal(property.TypeName, spaceName);
                        var type = TypeHelper.CreateType(typeName, true);
                        var propertyName = property.Name;
                        var valueName = property.Value;
                        var value = this.ObjectService.GetObjectInternal(valueName, spaceName, type, items);
                        if (instance is IPropertyDescriptor) {
                            ((IPropertyDescriptor)instance).SetValue(propertyName, value);
                        } else {
                            TypeHelper.SetPropertyValue(instance, propertyName, value);
                        }
                    }
                }

                EXIT:

                if(instance != null) {
                    ctx.ObjectInstance = instance;
                    this.OnObjectCreated(ctx);
                }

                return instance;
            }
Example #32
0
 public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting)
     : this(objectBuilder, objectSetting, null)
 {
 }
Example #33
0
 public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting) : this(objectBuilder, objectSetting, null)
 {
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, IDictionary items, params object[] args)
 {
     return this.CreateObject(objectSetting, items, args);
 }
Example #35
0
 void ILifetimeContainer.Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
 {
     this.Init(objectSetting, objectBuilder);
 }
Example #36
0
 public object CreateObject(IObjectSetting setting, Type objectType, string uri, params object[] parameters)
 {
     var factoryType = typeof (ChannelFactory<>).MakeGenericType(objectType);
     var methodCreateChannel = factoryType.GetMethod("CreateChannel", BindingFlags.Public | BindingFlags.Static, null, new[] {typeof (Binding), typeof (EndpointAddress)}, null);
     return methodCreateChannel.Invoke(null, new object[] { CreateBinding(setting, uri), new EndpointAddress(uri) });
 }
Example #37
0
 protected virtual object CreateObjectInternal(IObjectSetting objectSetting, IDictionary items)
 {
     return(this.ObjectBuilder.CreateObject(objectSetting, items));
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, IDictionary items)
 {
     return this.CreateObject(objectSetting, items);
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, IDictionary items, params object[] args)
 {
     return(this.CreateObject(objectSetting, items, args));
 }
            protected virtual object CreateObject(IObjectSetting objectSetting, IDictionary items)
            {
                var ctx      = new ObjectBuilderContext(this, objectSetting, items);
                var instance = this.OnObjectCreating(ctx);

                if (instance != null)
                {
                    return(instance);
                }

                this.CheckObjectSettingDependencies(objectSetting);

                var builderType = objectSetting.Builder;

                if (!string.IsNullOrEmpty(builderType))
                {
                    var builder = (Esb.IObjectBuilder) this.ObjectService.GetObjectInternal(builderType, objectSetting.Namespace, typeof(Esb.IObjectBuilder), ctx.Items);
                    if (builder != null)
                    {
                        instance = builder.CreateObject(objectSetting);
                        if (instance != null)
                        {
                            goto EXIT;
                        }
                    }
                }

                var spaceName = objectSetting.Namespace;

                if (objectSetting.Dependencies != null && objectSetting.Dependencies.Length > 0)
                {
                    foreach (var dependencySetting in objectSetting.Dependencies)
                    {
                        var value = dependencySetting.Name;
                        this.ObjectService.GetObjectInternal(value, spaceName, null, items);
                    }
                }

                var mapTo = objectSetting.MapTo;

                if (string.IsNullOrEmpty(mapTo))
                {
                    mapTo = objectSetting.TypeName;
                }
                else
                {
                    instance = this.ObjectService.GetObjectInternal(mapTo, spaceName, null, items);
                    if (instance != null)
                    {
                        return(instance);
                    }
                }
                mapTo = this.ObjectService.GetTypeNameInternal(mapTo, spaceName);

                var constructor = objectSetting.Constructor;

                if (constructor != null)
                {
                    var parameters = constructor.Parameters;
                    if (parameters != null)
                    {
                        var length = parameters.Length;
                        if (length > 0)
                        {
                            var types  = new Type[length];
                            var values = new object[length];
                            for (var i = 0; i < parameters.Length; i++)
                            {
                                var parameter = parameters[i];
                                var typeName  = this.ObjectService.GetTypeNameInternal(parameter.TypeName, spaceName);
                                var type      = TypeHelper.CreateType(typeName, true);
                                types[i] = type;
                                var valueString = parameter.Value;
                                var value       = this.ObjectService.GetObjectInternal(valueString, spaceName, type, items);
                                values[i] = value;
                            }
                            instance = TypeHelper.CreateObject(mapTo, null, true, types, values);
                        }
                    }
                }

                if (instance == null)
                {
                    instance = TypeHelper.CreateObject(mapTo, null, true);
                }

                if (instance != null && objectSetting.Properties != null && objectSetting.Properties.Length > 0)
                {
                    foreach (var property in objectSetting.Properties)
                    {
                        var typeName     = this.ObjectService.GetTypeNameInternal(property.TypeName, spaceName);
                        var type         = TypeHelper.CreateType(typeName, true);
                        var propertyName = property.Name;
                        var valueName    = property.Value;
                        var value        = this.ObjectService.GetObjectInternal(valueName, spaceName, type, items);
                        if (instance is IPropertyDescriptor)
                        {
                            ((IPropertyDescriptor)instance).SetValue(propertyName, value);
                        }
                        else
                        {
                            TypeHelper.SetPropertyValue(instance, propertyName, value);
                        }
                    }
                }

EXIT:

                if (instance != null)
                {
                    ctx.ObjectInstance = instance;
                    this.OnObjectCreated(ctx);
                }

                return(instance);
            }
 protected virtual void CheckObjectSettingDependencies(IObjectSetting objectSetting)
 {
     bool state;
     if(!this.ObjectSettingDependencies.TryGetValue(objectSetting, out state)) {
         lock (this.ObjectSettingDependencies) {
             if(!this.ObjectSettingDependencies.TryGetValue(objectSetting, out state)) {
                 state = this.CheckObjectSettingDependencies(objectSetting, new List<IObjectSetting>());
             }
         }
     }
     if(!state) {
         throw new ConfigException("对象依赖进入死循环,请检查配置");
     }
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, params object[] args)
 {
     return this.CreateObject(objectSetting, null, args);
 }
Example #43
0
 void ILifetimeContainer.Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
 {
     this.Init(objectSetting, objectBuilder);
 }
            protected virtual object CreateObject(IObjectSetting objectSetting, IDictionary items, params object[] args)
            {
                var ctx = new ObjectBuilderContext(this, objectSetting, items);
                var instance = this.OnObjectCreating(ctx);
                if (instance != null) {
                    return instance;
                }

                var mapTo = objectSetting.MapTo;
                if (string.IsNullOrEmpty(mapTo)) {
                    mapTo = objectSetting.TypeName;
                }
                mapTo = this.ObjectService.GetTypeNameInternal(mapTo, objectSetting.Namespace);
                instance = TypeHelper.CreateObject(mapTo, null, true, args);
                if(instance != null) {
                    ctx.ObjectInstance = instance;
                    this.OnObjectCreated(ctx);
                }
                return instance;
            }
Example #45
0
 protected virtual void Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder)
 {
     this.ObjectSetting = objectSetting;
     this.ObjectBuilder = objectBuilder;
 }
 object IObjectBuilder.CreateObject(IObjectSetting objectSetting, IDictionary items)
 {
     return(this.CreateObject(objectSetting, items));
 }
Example #47
0
 public object CreateObject(IObjectSetting setting, params object[] parameters)
 {
     return(this.coreBuilder.CreateObject(setting as Core.Config.IObjectSetting, parameters));
 }
Example #48
0
 public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting, IDictionary items)
     : base(items)
 {
     this.ObjectBuilder = objectBuilder;
     this.ObjectSetting = objectSetting;
 }
            protected virtual bool CheckObjectSettingDependencies(IObjectSetting objectSetting, List<IObjectSetting> settingRoute)
            {
                if(this.ObjectSettingDependencies.ContainsKey(objectSetting)) {
                    return this.ObjectSettingDependencies[objectSetting];
                }

                var state = true;
                var currentRoute = new List<IObjectSetting>(settingRoute) { objectSetting };
                var currentDependencies = new List<IObjectSetting>();

                var spaceName = objectSetting.Namespace;
                var builderType = objectSetting.Builder;
                if(!string.IsNullOrEmpty(builderType)) {
                    var setting = this.ObjectService.GetObjectBuildingSettingInternal(builderType, spaceName);
                    if (setting != null && !currentDependencies.Contains(setting)) {
                        if (currentRoute.Contains(setting)) {
                            state = false;
                            goto EXIT;
                        }
                        currentDependencies.Add(setting);
                    }
                }

                if(objectSetting.Properties != null && objectSetting.Properties.Length > 0) {
                    foreach(var property in objectSetting.Properties) {
                        var value = property.Value;
                        var setting = this.ObjectService.GetObjectBuildingSettingInternal(value, spaceName);
                        if (setting != null && !currentDependencies.Contains(setting)) {
                            if (currentRoute.Contains(setting)) {
                                state = false;
                                goto EXIT;
                            }
                            currentDependencies.Add(setting);
                        }
                    }
                }

                if(objectSetting.Dependencies != null && objectSetting.Dependencies.Length > 0) {
                    foreach (var dependencySetting in objectSetting.Dependencies) {
                        var value = dependencySetting.Name;
                        var setting = this.ObjectService.GetObjectBuildingSettingInternal(value, spaceName);
                        if (setting != null && !currentDependencies.Contains(setting)) {
                            if (currentRoute.Contains(setting)) {
                                state = false;
                                goto EXIT;
                            }
                            currentDependencies.Add(setting);
                        }
                    }
                }

                var constructor = objectSetting.Constructor;
                if(constructor != null) {
                    var parameters = constructor.Parameters;
                    if (parameters != null) {
                        var length = parameters.Length;
                        if (length > 0) {
                            for (var i = 0; i < parameters.Length; i++) {
                                var parameter = parameters[i];
                                var value = parameter.Value;
                                var setting = this.ObjectService.GetObjectBuildingSettingInternal(value, spaceName);
                                if (setting != null && !currentDependencies.Contains(setting)) {
                                    if(currentRoute.Contains(setting)) {
                                        state = false;
                                        goto EXIT;
                                    }
                                    currentDependencies.Add(setting);
                                }
                            }
                        }
                    }
                }

                foreach (var setting in currentDependencies) {
                    var settingDependencies = new List<IObjectSetting>(currentRoute);
                    if (!this.CheckObjectSettingDependencies(setting, settingDependencies)) {
                        state = false;
                        goto EXIT;
                    }
                }

                EXIT:
                this.ObjectSettingDependencies.Add(objectSetting, state);
                return state;
            }