上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 45 下一页
摘要: 如何理解元数我们可以把元数据理解为随类型一起导出的附加信息。有时候我们会考虑,把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件。默认的类型导出带有元数据吗上面的内容我说得比较简洁,也许您不是很理解,不要紧,在编程里面,很多东西我们都是写了代码后才理解的。所以,我的理论功底比较差,最不擅长的就是长篇大论,还是从代码中看吧。我们首先要弄清楚一下问题:在我没有手动去添加元数据的默认导出类型,是否带有元数据。为了使代码更简单,这里我直接把一个类导出,而不编写公共接口了。这里我们直接编写一个类,然后直接导入这个类型即可:示例代码定在当前程序集中,可以在AssemblyCat 阅读全文
posted @ 2013-09-16 16:50 东邪独孤 阅读(1774) 评论(1) 推荐(1)
摘要: 在前面的文章中,几乎每个示例我们都会接触到扩展类的搜索位置,我们也不妨想一下,既然是自动扩展,它肯定会有一个或者多人可供查找的位置,不然MEF框架怎么知道哪里有扩展组件呢?就像我们用导航系统去查找某个地方的所有旅店一样,正因为在该地的旅店已在数据库中注册了相关信息,我们的导航系统才能查找到它,如果某家旅店没有向导航数据库提供任何数据,那很显然导航系统是无法识别到它的详细地址的。MEF对扩展组件的查找范围通常有三个:AssemblyCatalog:从某个程序集中查找。ApplicationCatalog:在应用程序所在的目录下查找。DirectoryCatalog:在某个目录下查找,如D:\\L 阅读全文
posted @ 2013-09-04 17:29 东邪独孤 阅读(1717) 评论(3) 推荐(4)
摘要: 通过前面两篇文章的介绍,相信各位会明白MEF中有不少实用价值。上一文中我们也讨论了导入与导出,对于导出导入,今天我们再深入一点点,嗯,只是深入一点点而已,不会很难的,请大家务必放心,如果大家觉得看文章枯燥,不妨一边喝牛奶一边阅读。上一文中我们都是把整个类型(整个类)进行导出,不过有时候,我们可能会考虑只导出类的某些成员,比如某个属性或某个字段等。我们还是少说理论,免得大家喝不下牛奶,还是直接上菜吧。为了便于测试,以下示例把组件都写在当前程序集中,也就是在同一个项目,然后用AssemblyCatalog来查找。首先,定义一个公共接口IWork。然后分别用两个类来实现该接口。接着,我们再定义一个总 阅读全文
posted @ 2013-08-29 12:12 东邪独孤 阅读(1926) 评论(2) 推荐(1)
摘要: 上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路。本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF。在上一文中我们知道,对于每一个实现了公共规范的扩展组件,都需要进行导出,随后我们的主应用程序文件中会自动进行组装。这便产生了一个疑问:为什么需要导出?如果大家还记得,以前我们用VC++写.dll文件时,都会把需要提供给别人调用的函数标记为导出函数,这样别人才能调用我们编写的函数。就好比我们的家,我们一般会有客厅,既然叫客厅,当然是展现给客人看的。有客人来了,我们会在客厅接待,当然我们不愿意让客人进入我们的卧室,那是较为隐私的地方。因此,对于我们编写的扩 阅读全文
posted @ 2013-08-23 12:08 东邪独孤 阅读(2431) 评论(3) 推荐(4)
摘要: 在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序。这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而对于像ERP系统那样复杂而且常常需要扩展的应用程序,这种扩展方法就不够方便,因为每次都要修改源代码或重新引用组件。尤其是组件(许多dll),如果每编写一个新组件又要在主项目中引用一次,显然主项目就不得不经常重新生成。要是能有一种机制,可以在主项目应用程序不作任何修改就可以自动识别并扩展组件,就会很便捷,我们每次扩展只需要更新或者添加某些dll文件即可。MEF正是为了解决上述问题而诞生。MEF全称M 阅读全文
posted @ 2013-08-21 16:52 东邪独孤 阅读(2955) 评论(2) 推荐(2)
摘要: 因为文章都写在CSDN博客上,转过来有些费劲,而导入功能有一大缺陷,出现重复。在很多资料或书籍上都翻译为“独立存储”,不过,我想了一下,决定将IsolatedStorage翻译为“隔离存储”,我想这样会更方便大家对这一概念的理解。关于何为隔离存储,按照固有习惯,我不希望作太多理论上的解释,一来理论化的东西容易把简单的事情变得复杂化,二来,就算把理论知识说得有多完美,相信大家都没兴趣看,就算你有兴趣也会一头雾水。隔离存储不是WP特有的,在Silverlight或WPF中也有,而且,更准确地讲,“独立存储”在.NET 2.0的时候已经出现,可能大家没有注意到,不信?你可以在.NET类库中找一下。以 阅读全文
posted @ 2012-11-07 09:52 东邪独孤 阅读(280) 评论(0) 推荐(0)
摘要: 启动器与选择器简单的地方在于,它们的使用方法几乎一模一样,从前面几节中,我相信大家基本上都知道如何使用它们了。 这里还是哆嗦一下吧,使用启动器和选择器的步骤如下: 1、实例化,new一个; 2、准备各参数,对相关的属性赋值; 3、Show; 4、对于启动器,不需要这步,但选择器有返回数据,所以需要处理完成事件。本节再举两例子,启动器和选择器就可以完成了,然后我们下一节开始,探讨新的知识点。例一:媒体播放器。这是一个启动器,用起来更方便。 主要属性有: Controls——要显示控制按钮,如暂集,停止等,它是一个带了Flags特性标记的枚举,所以可以多个值合并,如MediaPlaybackCon 阅读全文
posted @ 2012-06-15 15:58 东邪独孤 阅读(413) 评论(0) 推荐(0)
摘要: 从名字上就看出来,这个家伙就是打开浏览并浏览到指定页面。它有两个用途完全一样的属性:Uri属性是System.Uri类型,这是新写进的属性;URL是字符串类型,但如果使用该属性,会发出警告“已过时”,所以建议使用前者。下面这个例子,点击按钮后都是打开WEB浏览器并定位到文本框中输入的地址,但分别用了上面所说的两个属性,当程序运行后,你会发现其效果是一样的。<phone:PhoneApplicationPage x:Class="WebTask.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/x 阅读全文
posted @ 2012-06-15 15:52 东邪独孤 阅读(253) 评论(0) 推荐(0)
摘要: 本节我们通过一个简单的发送短信示例来演示一下如果配合使用PhoneNumberChooserTask和SmsComposeTask类。PhoneNumberChooserTask是选择器,它用于从你的电话簿里选择你要发送短信的电话号码;SmsComposeTask就是用来启动发送短信组件并显示发送窗口。注意,这些操作都在用户的操控之中,发送短信一定会显示可视化页面的,而且不会偷偷地在后台发送,因为Windows phone是以用户体验和安全为原则的,后台发送是不允许的,而且发送过程是由用户控制的,你可以选择取消或退出。SmsComposeTask类的To属性就是目标电话号码,Body就是你要发 阅读全文
posted @ 2012-06-15 15:48 东邪独孤 阅读(712) 评论(0) 推荐(0)
摘要: 这两个组件都属于选择器,而且它们也有很多相似的地方,最明显的上一点,它们都是用来选择图片。一、CameraCaptureTask选择器。它用于启动照相机,当你拍下照片后,自动把照的字节流返回给调用方应用程序。前文说过,启动器和选择的使用方法和步骤都是一样的。对于CameraCaptureTask组件也如此,不过注意的一点是,处理Completed事件时一定要记住,尽可能的使用页面类的Dispatcher.BeginInvoke方法,因为异步回调直接访问UI元素是不安全的,极有可能会引发异常,但我不是说绝对。 <Grid> <Grid.RowDefinitions> .. 阅读全文
posted @ 2012-03-26 21:12 东邪独孤 阅读(286) 评论(0) 推荐(0)
上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 45 下一页