none
Lazy<T, TMetadata>中第二个泛型(元数据)和CLR的元数据是同一个东西吗?

    问题

  • 在MS讲MEF的例子里,有这样一个变量:

    IEnumerable<Lazy<IOperation, IOperationData>> operations;

    查看Lazy第二个泛型是指类的元数据类型,再看看类:

       [Export(typeof(IOperation))]
        [ExportMetadata("Symbol", '-')]
        class Subtract : IOperation
        {
            public int Operate(int left, int right)
            {
                return left - right;
            }
    
        }

    也就是说,ExportMetadata给Subtract加了Symbol元数据,值为'-'的字符。

    现在的问题是,这样增加的元数据Symbol和自己定义一个char类型的Symbol有什么区别?

      [Export(typeof(IOperation))]
        class Subtract : IOperation
        {
            public char Symbol = '-';
            public int Operate(int left, int right)
            {
                return left - right;
            }
    
        }

    经过测试时不行的,那元数据是如何描述属性呢?

    哪里理解出现错误了?

    2016年6月16日 8:42

答案

  • Hi,

    这两者是有区别的

    >>现在的问题是,这样增加的元数据Symbol和自己定义一个char类型的Symbol有什么区别?

      [ExportMetadata("Symbol", '-')]

    上面这一段我猜测它的作用是向编译器声明下文中的符号'-'指代运算符’减法‘操作。编译器理解了这个声明,下文方法中'-'生效了,而char字符肯定无法让编译器理解这个符号的功能。

    参考资料:

    因为 MEF 部分以声明方式详细说明了其可在运行时发现自身的功能,这意味着应用程序不使用硬编码引用或脆弱的配置文件也能够使用 MEF 部分。MEF 让应用程序得以通过元数据发现和检查部分,而无须将部分实例化甚至于加载其程序集。因此,无须仔细说明应当何时加载扩展以及如何加载。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.




    2016年6月17日 7:26
  • CLR的元数据是描述数据(类型信息)的数据,是有一组数据表构成的一个二进制数据块。元数据被CLR编译器编译后保存在Windows可移植执行体(PE)文件中,即和它描述的IL嵌入在EXE/DLL文件中。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    http://www.cnblogs.com/daimage/archive/2012/02/05/2338731.html
    2016年6月27日 11:21

全部回复

  • Hi,

    这两者是有区别的

    >>现在的问题是,这样增加的元数据Symbol和自己定义一个char类型的Symbol有什么区别?

      [ExportMetadata("Symbol", '-')]

    上面这一段我猜测它的作用是向编译器声明下文中的符号'-'指代运算符’减法‘操作。编译器理解了这个声明,下文方法中'-'生效了,而char字符肯定无法让编译器理解这个符号的功能。

    参考资料:

    因为 MEF 部分以声明方式详细说明了其可在运行时发现自身的功能,这意味着应用程序不使用硬编码引用或脆弱的配置文件也能够使用 MEF 部分。MEF 让应用程序得以通过元数据发现和检查部分,而无须将部分实例化甚至于加载其程序集。因此,无须仔细说明应当何时加载扩展以及如何加载。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.




    2016年6月17日 7:26
  • Hi,

    这两者是有区别的

    >>现在的问题是,这样增加的元数据Symbol和自己定义一个char类型的Symbol有什么区别?

      [ExportMetadata("Symbol", '-')]

    上面这一段我猜测它的作用是向编译器声明下文中的符号'-'指代运算符’减法‘操作。编译器理解了这个声明,下文方法中'-'生效了,而char字符肯定无法让编译器理解这个符号的功能。

    参考资料:

    因为 MEF 部分以声明方式详细说明了其可在运行时发现自身的功能,这意味着应用程序不使用硬编码引用或脆弱的配置文件也能够使用 MEF 部分。MEF 让应用程序得以通过元数据发现和检查部分,而无须将部分实例化甚至于加载其程序集。因此,无须仔细说明应当何时加载扩展以及如何加载。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.




    我想确认一下,这两个是完全不同的两个东西,只是名字相同吗?

    也就是说通过MEF的ExportMetadata“定义的元数据”指的并不是PE文件里的元数据,而是另外一个名字也叫“元数据”的概念,是吗?

    能确定吗?


    2016年6月22日 6:57
  • CLR的元数据是描述数据(类型信息)的数据,是有一组数据表构成的一个二进制数据块。元数据被CLR编译器编译后保存在Windows可移植执行体(PE)文件中,即和它描述的IL嵌入在EXE/DLL文件中。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    http://www.cnblogs.com/daimage/archive/2012/02/05/2338731.html
    2016年6月27日 11:21