// Todo: This is duplicate of code in WorkflowRuntime
        internal object ServiceFromSettings(WorkflowRuntimeServiceElement serviceSettings)
        {
            object service = null;

            Type t = Type.GetType(serviceSettings.Type, true);

            ConstructorInfo serviceProviderAndSettingsConstructor = null;
            ConstructorInfo serviceProviderConstructor            = null;
            ConstructorInfo settingsConstructor = null;

            foreach (ConstructorInfo ci in t.GetConstructors())
            {
                ParameterInfo[] pi = ci.GetParameters();
                if (pi.Length == 1)
                {
                    if (typeof(IServiceProvider).IsAssignableFrom(pi[0].ParameterType))
                    {
                        serviceProviderConstructor = ci;
                    }
                    else if (typeof(NameValueCollection).IsAssignableFrom(pi[0].ParameterType))
                    {
                        settingsConstructor = ci;
                    }
                }
                else if (pi.Length == 2)
                {
                    if (typeof(IServiceProvider).IsAssignableFrom(pi[0].ParameterType) &&
                        typeof(NameValueCollection).IsAssignableFrom(pi[1].ParameterType))
                    {
                        serviceProviderAndSettingsConstructor = ci;
                        break;
                    }
                }
            }

            if (serviceProviderAndSettingsConstructor != null)
            {
                service = serviceProviderAndSettingsConstructor.Invoke(
                    new object[] { Runtime, serviceSettings.Parameters });
            }
            else if (serviceProviderConstructor != null)
            {
                service = serviceProviderConstructor.Invoke(new object[] { Runtime });
            }
            else if (settingsConstructor != null)
            {
                service = settingsConstructor.Invoke(new object[] { serviceSettings.Parameters });
            }
            else
            {
                service = Activator.CreateInstance(t);
            }
            return(service);
        }
예제 #2
0
        internal object ServiceFromSettings(WorkflowRuntimeServiceElement serviceSettings)
        {
            Type            type  = Type.GetType(serviceSettings.Type, true);
            ConstructorInfo info  = null;
            ConstructorInfo info2 = null;
            ConstructorInfo info3 = null;

            foreach (ConstructorInfo info4 in type.GetConstructors())
            {
                ParameterInfo[] parameters = info4.GetParameters();
                if (parameters.Length == 1)
                {
                    if (typeof(IServiceProvider).IsAssignableFrom(parameters[0].ParameterType))
                    {
                        info2 = info4;
                    }
                    else if (typeof(NameValueCollection).IsAssignableFrom(parameters[0].ParameterType))
                    {
                        info3 = info4;
                    }
                }
                else if (((parameters.Length == 2) && typeof(IServiceProvider).IsAssignableFrom(parameters[0].ParameterType)) && typeof(NameValueCollection).IsAssignableFrom(parameters[1].ParameterType))
                {
                    info = info4;
                    break;
                }
            }
            if (info != null)
            {
                return(info.Invoke(new object[] { base.Runtime, serviceSettings.Parameters }));
            }
            if (info2 != null)
            {
                return(info2.Invoke(new object[] { base.Runtime }));
            }
            if (info3 != null)
            {
                return(info3.Invoke(new object[] { serviceSettings.Parameters }));
            }
            return(Activator.CreateInstance(type));
        }
 public void Remove(WorkflowRuntimeServiceElement serviceSettings)
 {
     base.BaseRemove(base.GetElementKey(serviceSettings));
 }