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 { } } }
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); }
/// <summary> /// 构造 /// </summary> public ObjectBuildContext(IServiceLocator serviceLocator, IObjectSetting objectSetting, IObjectBuilder objectBuilder, IDictionary items) : base(items) { this.ServiceLocator = serviceLocator; this.ObjectSetting = objectSetting; this.ObjectBuilder = objectBuilder; }
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; }
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); }
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) })); }
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); }
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); } }
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); }
/// <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); }
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; }
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()); }
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); }
/// <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("对象依赖进入死循环,请检查配置"); } }
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; }
/// <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)); }
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); }
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 { } } }
public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting, IDictionary items) : base(items) { this.ObjectBuilder = objectBuilder; this.ObjectSetting = objectSetting; }
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); }
/// <summary> /// 构造 /// </summary> public ObjectBuildContext(IServiceLocator serviceLocator, IObjectSetting objectSetting, IObjectBuilder objectBuilder, IDictionary items) : base(items) { this.ServiceLocator = serviceLocator; this.ObjectSetting = objectSetting; this.ObjectBuilder = objectBuilder; }
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); }
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)); }
protected virtual void Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder) { this.ObjectSetting = objectSetting; this.ObjectBuilder = objectBuilder; }
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; }
public ObjectBuilderContext(IObjectBuilder objectBuilder, IObjectSetting objectSetting) : this(objectBuilder, objectSetting, null) { }
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); }
void ILifetimeContainer.Init(IObjectSetting objectSetting, IObjectBuilder objectBuilder) { this.Init(objectSetting, objectBuilder); }
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) }); }
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); }
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; }
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)); }
public object CreateObject(IObjectSetting setting, params object[] parameters) { return(this.coreBuilder.CreateObject(setting as Core.Config.IObjectSetting, parameters)); }
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; }