Ejemplo n.º 1
0
        public T CreateNewAppDomain <T>(string domainName) where T : class
        {
            // ReSharper disable once InvertIf
            if (AppDomains.FirstOrDefault(ad => ad.FriendlyName.Equals(domainName)) == null)
            {
                AppDomain domain = AppDomain.CreateDomain(domainName, AppDomain.CurrentDomain.Evidence, _appDomainSetup);
                AppDomains.Add(domain);

                // HARD-CODED constant
                Tracer.Instance.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "AppDomain {0} created.", domainName);

                //! This bypasses the Main method as it's not executing it.
                object instance = domain.CreateInstanceAndUnwrap(typeof(T).Assembly.FullName, typeof(T).FullName);
                Instances.Add(new KeyValuePair <string, object>(domainName, instance));

                // HARD-CODED constant
                Tracer.Instance.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "AppDomain Instance {0} created.", typeof(T).FullName);
                //x return AppDomainInstances.Last() as T;
                return(instance as T);
            }
            return(null);
        }
Ejemplo n.º 2
0
        public static AppDomain CreateAddInAppDomain(string AddInID)
        {
            try
            {
                string path = System.AppDomain.CurrentDomain.BaseDirectory + "\\bin\\AddIn.dll";

                //Create evidence for the new application domain from evidence of
                Evidence adEvidence = AppDomain.CurrentDomain.Evidence;

                AppDomainSetup ads = GetAppDomainSetup();

                AppDomain NewDomain = AppDomain.CreateDomain(AddInID, adEvidence, ads);
                //string friendlyName = myDomain.FriendlyName;
                if (!AppDomains.ContainsKey(AddInID))
                {
                    AppDomains.Add(AddInID, NewDomain);
                }
                else
                {
                    AppDomains[AddInID] = NewDomain;
                }
                //IObject obj = (IObject)myDomain.CreateInstanceFromAndUnwrap(path, "Interface.AddInLoader");
                IAddInLoader obj = (IAddInLoader)NewDomain.CreateInstanceFromAndUnwrap(path, "AddIn.Entity.AddInLoader");
                if (!Loaders.ContainsKey(AddInID))
                {
                    Loaders.Add(AddInID, obj);
                }
                else
                {
                    Loaders[AddInID] = obj;
                }
                return(NewDomain);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }