/// <summary>
        /// main initialisation routine for the <see cref="Runspace"/>
        /// </summary>
        /// <param name="snapin"><see cref="SnapIn"/> to be initialized together with the <see cref="Runspace"/></param>
        private void InitRunSpace(SnapIn snapin)
        {
            const string MethodName = "InitRunSpace";
            Debug.WriteLine(MethodName + "(" + snapin + ")" + ":entry", ClassName);

            // create a new config from scratch
            PSSnapInException snapOutput = null;
            this.runSpaceConfig = RunspaceConfiguration.Create();

            switch (snapin)
            {
                case SnapIn.Exchange:
                    var serverVersion = GetExchangeServerVersion();
                    switch (serverVersion)
                    {
                        case ExchangeVersion.E2007:
                            // used for force load of the exchange dll's
                            AppDomain.CurrentDomain.AssemblyResolve +=
                                             new ResolveEventHandler(ExchangeUtility.AssemblyResolver2007);

                            this.runSpaceConfig.AddPSSnapIn(Exchange2007SnapIn, out snapOutput);
                            break;
                        case ExchangeVersion.E2010:
                            // used for force load of the exchange dll's
                            AppDomain.CurrentDomain.AssemblyResolve +=
                                             new ResolveEventHandler(ExchangeUtility.AssemblyResolver2010);

                            this.runSpaceConfig.AddPSSnapIn(Exchange2010SnapIn, out snapOutput);
                            break;
                    }
                    break;
            }

            // check snapOutput
            if (snapOutput != null)
            {
                throw snapOutput;
            }

            // create the real Runspace and open it for processing
            this.runSpace = RunspaceFactory.CreateRunspace(this.runSpaceConfig);
            this.runSpace.Open();
            this.runSpaceInvoke = new RunspaceInvoke(this.runSpace);

            Debug.WriteLine(MethodName + ":exit", ClassName);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RunSpaceInstance" /> class. 
        /// </summary>
        /// <param name="snapin">Type of snapin to be loaded</param>
        /// <param name="messageCatalog">The message catalog used for conveying localized messages.</param>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="messageCatalog"/> is null.</exception>
        public RunSpaceInstance(SnapIn snapin, ConnectorMessages messageCatalog)
        {
            Assertions.NullCheck( messageCatalog, "messageCatalog" );
            _messageCatalog = messageCatalog;

            // initialize this
            this.InitRunSpace(snapin);
        }