Example #1
0
        /// <summary>
        /// 基于约定的部件注册
        /// </summary>
        /// <param name="path"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static bool FindEx(string path, MEFClient.MyCal obj)
        {
            var res = false;
            var rb  = new RegistrationBuilder();                                               //用于定义出口和入口的约定

            rb.ForTypesDerivedFrom <MEFContract.ICalShow>().Export <MEFContract.ICalShow>();   //指定出口约定  给所有实现接口的类型应用[Export(Type)]特性
            rb.ForType <MEFClient.MyCal>().ImportProperty <MEFContract.ICalShow>(t => t.Show); //指定入口约定 将入口映射到指定的属性上
            var dc = new DirectoryCatalog(path, rb);
            CompositionService sv = dc.CreateCompositionService();

            try
            {
                sv.SatisfyImportsOnce(obj, rb); //在目录中搜索部件 多个出口匹配项出异常
                res = true;
            }
            catch (ChangeRejectedException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (CompositionException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            sv.Dispose();
            return(res);
        }
Example #2
0
        static void MefTest(string pa)
        {
            var a = new MEFClient.MyClass();

            if (Find(pa, a))
            {
                var t = a.cal.GetOperations();
            }
            var b = new MEFClient.MyCal();

            FindExt <MEFClient.MyCal, MEFContract.ICalShow>(pa, b);
            var s = b.Show?.Show(5);
            var c = new MEFClient.MCal2();

            if (Find(pa, c))
            {
                var res3 = c.MDefinC.GetStr();
                var res4 = c.Subtract[0].Value(0.3, 0.4);
                //var resi3 = c.Add[0](90, 90);
                var s1 = "1";
                var s2 = "2";
                c.RefeObj(s1, s2);
            }
        }