Esempio n. 1
0
        public static void RegisterConfig(this IIocBuilder builder, XElement root)
        {
            var compEles = root.Element("components").Elements("component");

            foreach (var ele in compEles)
            {
                var           serviceType   = Type.GetType(ele.Attribute("type").Value);
                var           interfaceType = Type.GetType(ele.Attribute("service").Value);
                LifeTimeScope scope         = LifeTimeScope.Transient;
                if (ele.Attribute("scope") != null)
                {
                    switch (ele.Attribute("scope").Value.ToLower())
                    {
                    case "singleton":
                        scope = LifeTimeScope.Singleton;
                        break;

                    case "workunit":
                        scope = LifeTimeScope.WorkUnit;
                        break;

                    case "transiant":
                    default:
                        scope = LifeTimeScope.Transient;
                        break;
                    }
                }
                bool   autoWire = ele.AttributeValue <bool>("autowire", false);
                string name     = ele.AttributeValue("name", null);
                Func <IIocContext, IDictionary <string, object> > getConstructorParameters = null;
                if (ele.HasElements)
                {
                    var paraEles = ele.Element("parameters").Elements("parameter");
                    Dictionary <string, object> paras = new Dictionary <string, object>();
                    foreach (var pele in paraEles)
                    {
                        paras.Add(pele.Attribute("name").Value, pele.Attribute("value").Value);
                    }
                    getConstructorParameters = (ctx) => { return(paras); };
                }

                builder.RegisterType(interfaceType, serviceType, scope, name, autoWire, getConstructorParameters);
            }

            var moduleEles = root.Element("modules").Elements("module");

            foreach (var ele in moduleEles)
            {
                var        moduleType = Type.GetType(ele.Attribute("type").Value);
                IIocModule module     = Activator.CreateInstance(moduleType) as IIocModule;
                builder.RegisterModule(module);
            }
        }
Esempio n. 2
0
 public static void RegisterModule(this IIocBuilder builder, IIocModule module)
 {
     module.Load(builder);
 }
Esempio n. 3
0
        public static void RegisterConfig(this IContainerManager containerManager, XElement root)
        {
            var compEles = root.Element("components").Elements("component");

            foreach (var ele in compEles)
            {
                var serviceType          = GetTypeByFullName(ele.Attribute("type").Value);
                var interfaceType        = GetTypeByFullName(ele.Attribute("service").Value);
                ComponentLifeStyle scope = ComponentLifeStyle.Transient;
                if (ele.Attribute("scope") != null)
                {
                    switch (ele.Attribute("scope").Value.ToLower())
                    {
                    case "singleton":
                        scope = ComponentLifeStyle.Singleton;
                        break;

                    case "request":
                        scope = ComponentLifeStyle.InRequestScope;
                        break;

                    case "thread":
                        scope = ComponentLifeStyle.InThreadScope;
                        break;

                    case "transiant":
                    default:
                        scope = ComponentLifeStyle.Transient;
                        break;
                    }
                }
                string name = ele.Attribute("name") == null ? null : ele.Attribute("name").Value;

                if (ele.HasElements)
                {
                    var paraEles     = ele.Element("parameters").Elements("parameter");
                    var constructors = serviceType.GetConstructors();
                    foreach (var constructor in constructors)
                    {
                        var           parameters = constructor.GetParameters();
                        List <object> pvals      = new List <object>();
                        try
                        {
                            foreach (var para in parameters)
                            {
                                var    pele = paraEles.FirstOrDefault(e => e.Attribute("name").Value.ToLower() == para.Name.ToLower());
                                object val  = null;
                                if (pele != null)
                                {
                                    val = ConvertTo(para.ParameterType, pele.Attribute("value").Value);
                                }
                                else
                                {
                                    val = containerManager.TryResolve(para.ParameterType);
                                }
                                pvals.Add(val);
                            }

                            object instance = constructor.Invoke(pvals.ToArray());
                            containerManager.AddComponentInstance(interfaceType, instance, name);
                        }
                        catch
                        {
                            continue;
                        }
                    }
                }
                else
                {
                    containerManager.AddComponent(interfaceType, serviceType, name, scope);
                }
            }

            var moduleEles = root.Element("modules").Elements("module");

            foreach (var ele in moduleEles)
            {
                var        moduleType = Type.GetType(ele.Attribute("type").Value);
                IIocModule module     = Activator.CreateInstance(moduleType) as IIocModule;
                containerManager.RegisterModule(module);
            }
        }
Esempio n. 4
0
 public static void RegisterModule(this IContainerManager containerManager, IIocModule module)
 {
     module.Load(containerManager);
 }
 public static void RegisterModule(this IContainerManager containerManager, IIocModule module)
 {
     module.Load(containerManager);
 }
Esempio n. 6
0
 public static void AddModule(this IFunctionsHostBuilder builder, IIocModule module)
 {
     module.AddServices(builder);
 }