private PluginExecutionFakeContext(Type pluginType, Guid?userId)
        {
            this.userId            = userId;
            this.pluginMethodCache = new Kipon.Fake.Xrm.Reflection.PluginMethod.Cache(pluginType.Assembly);

            this.orgServiceFactory = new Services.OrganizationServiceFactory(this);

            var pt = this.orgServiceFactory as Microsoft.Xrm.Sdk.IProxyTypesAssemblyProvider;

            if (pt != null)
            {
                pt.ProxyTypesAssembly = pluginType.Assembly;
            }

            this.traceService = new Services.TracingService();

            var key = $"{pluginType.FullName}:null:null";

            if (plugins.ContainsKey(key))
            {
                this.plugin = plugins[key];
            }
            else
            {
                this.plugin  = (Microsoft.Xrm.Sdk.IPlugin)System.Activator.CreateInstance(pluginType);
                plugins[key] = this.plugin;
                Kipon.Fake.Xrm.Reflection.Types.Instance.SetAssembly(this.plugin.GetType().Assembly);
            }
        }
        private PluginExecutionFakeContext(Type pluginType, Guid?userId, string unsecureConfig, string secureConfig) : this(pluginType, userId)
        {
            this.unsecureConfig = unsecureConfig;
            this.secureConfig   = secureConfig;

            var key = $"{pluginType.FullName}:{(this.unsecureConfig == null ? "null":this.unsecureConfig)}:{(this.secureConfig != null ? this.secureConfig : "null")}";

            if (plugins.ContainsKey(key))
            {
                this.plugin = plugins[key];
            }
            else
            {
                this.plugin  = (Microsoft.Xrm.Sdk.IPlugin)System.Activator.CreateInstance(pluginType);
                plugins[key] = this.plugin;
            }

            this.plugin = (Microsoft.Xrm.Sdk.IPlugin)System.Activator.CreateInstance(pluginType, new object[] { unsecureConfig, secureConfig });
            Kipon.Fake.Xrm.Reflection.Types.Instance.SetAssembly(plugin.GetType().Assembly);
        }