Пример #1
0
        //public
        public void LoadMod(string name, string path)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }
            if (!FileUtil.PathExists(path))
            {
                throw new Exception("path does not exist.");
            }
            if (!FileUtil.PathIsFile(path))
            {
                throw new Exception("path is not a file.");
            }

            AppDomain domain = AppDomain.CreateDomain(name);

            ServiceLocator.GetService <IExceptionHandler>().AddDomain(domain);
            Type    t   = typeof(ModBase);
            ModBase mod = null;

            try {
                mod = (ModBase)domain.CreateInstanceFromAndUnwrap(path, t.Name);
            } catch (Exception ex) {
                throw new Exception("Cannot create instance of mod.", ex);
            }
            if (mod == null)
            {
                throw new Exception("Cannot create instance of mod.");
            }

            mod.Load();

            if (mods.ContainsKey(name))
            {
                mods[name].Dispose();
                mods[name] = new ModContainer(domain, mod);
            }
            else
            {
                mods.TryAdd(name, new ModContainer(domain, mod));
            }
        }