• 使用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了。

  • 相关阅读:
    课后作业02-需求分析
    2018年春季个人阅读计划
    eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法
    阅读博客——我们应当怎样做需求分析? ------阅读笔记
    网络记事本第一天
    软件工程第九周总结
    软件工程第八周总结
    全球疫情web制作进度
    构建之法阅读笔记03
    软件工程第七周总结
  • 原文地址:https://www.cnblogs.com/chuifeng/p/1915092.html
Copyright © 2020-2023  润新知