zoukankan      html  css  js  c++  java
  • 使用MEF模式处理silverlight中的反射加载

      silverlight中常会用到反射来加载一些页面或控件,使用反射带来的问题是调用DLL或XAP中的方法或属性会很不方便,需要用string定义好方法或类名词。那么有没有一种好的方式可以处理这些问题呢。MEF将会处理这些。

      下面我会给出一个简单的DEMO。

      1.新建一个silverlight项目命名“MyMEF”。

      2.新建一个silverlight类库项目,命名“Model”.Model是我们需要反射加载的项目。

      3.在Model项目和MyMEF项目中引用“System.componentModel.compostion”。

      4.在MyMEF项目中引用“System.componentModel.compostion.Hosting”。

      5.MainPage代码如下:

        

    代码
    public partial class MainPage : UserControl
    {
    public MainPage()
    {
    InitializeComponent();
    }

    [Import(
    "model")]
    public IModel OurModel { get; set; }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
    string uri = Application.Current.Host.Source.AbsoluteUri;
    int index = uri.LastIndexOf("/"); //找出根URL
    uri = uri.Substring(0, index) + "/Model.dll";

    WebClient client
    = new WebClient();

    client.OpenReadCompleted
    += new OpenReadCompletedEventHandler((s1, e1) =>
    {
    AssemblyPart part
    = new AssemblyPart();
    Assembly ass
    = part.Load(e1.Result);
    //创建Catalog
    AssemblyCatalog cata = new AssemblyCatalog(ass);
    CompositionContainer container
    = new CompositionContainer(cata);
    CompositionBatch bat
    = new CompositionBatch();
    bat.AddPart(
    this);
    container.Compose(bat);

    OurTextBox.Text
    = OurModel.getData();
    });
    //启动异步下载
    client.OpenReadAsync(new Uri(uri));


    }
    }

      6.Model代码如下:

        

    代码
    public interface IModel
    {
    string getData();
    }

    public class ModelHolder
    {
    [Export(
    "model")]
    public IModel OurModel = new DataModel();
    }

    public class DataModel : IModel
    {
    #region IModel Members

    public string getData()
    {
    return "Moscow";
    }

    #endregion
    }

      7.编译过后将,Model生成的DLL拷贝到web网站的ClinetBin文件夹下。这样一个简单的MEF项目就OK了。

  • 相关阅读:
    MySQL基本命令总结
    B+树
    5.Flask-Migrate
    Tornado入门五
    Django之数据库表的单表查询
    MySQL表完整性约束
    MysQL表相关操作
    MySQL库相关操作
    MySQL创建用户+授权+备份
    公司 邮件 翻译 培训 6 长难句
  • 原文地址:https://www.cnblogs.com/chuifeng/p/1915092.html
Copyright © 2011-2022 走看看