示例#1
0
        public static void SavePluginSet()
        {
            PluginSetCollection <MyPluginSet> mySet = new PluginSetCollection <MyPluginSet>();

            mySet.PluginSet.Add(new MyPluginSet()
            {
                AssemblyName = "", InstanceType = "DynaModuleUT.MyModule", IP = "10.10.1.79"
            });
            mySet.PluginSet.Add(new MyPluginSet()
            {
                AssemblyName = "", InstanceType = "DynaModuleUT.MyModule", IP = "10.10.1.1"
            });
            mySet.PluginSet.Add(new MyPluginSet()
            {
                AssemblyName = "", InstanceType = "DynaModuleUT.MyModule", IP = "10.10.1.2"
            });

            XmlHelper.Save("MyPlugIn.xml", mySet);
        }
示例#2
0
        /// <summary>
        /// TMoudle可以用Interface,但TPlugin就必須是最後要使用的型別,因為它會需要讀取xml的資訊
        /// </summary>
        /// <typeparam name="TPlugin"></typeparam>
        /// <typeparam name="TModule"></typeparam>
        /// <returns></returns>
        public static List <DynaModuleInfo <TModule, TPlugin> > LoadPluginSet <TPlugin, TModule>(string filename) where TPlugin : IPluginSet
        {
            List <DynaModuleInfo <TModule, TPlugin> > result = new List <DynaModuleInfo <TModule, TPlugin> >();

            PluginSetCollection <TPlugin> mySet = XmlHelper.Load <PluginSetCollection <TPlugin> >(filename);

            foreach (TPlugin set in mySet.PluginSet)
            {
                Assembly     aa       = set.AssemblyName.Length > 0 ? Assembly.LoadFrom(set.AssemblyName) : Assembly.GetExecutingAssembly();
                ObjectHandle oSetting = Activator.CreateInstance(aa.FullName, set.InstanceType);
                if (oSetting != null && oSetting.Unwrap() is TModule)
                {
                    TModule obj = (TModule)oSetting.Unwrap();

                    result.Add(new DynaModuleInfo <TModule, TPlugin>()
                    {
                        Module = obj, Setting = set
                    });
                }
            }

            return(result);
        }