65.9K
CodeProject 正在变化。 阅读更多。
Home

MEF 与 WCF – 启动

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.63/5 (8投票s)

2011年7月24日

CPOL

1分钟阅读

viewsIcon

23455

downloadIcon

291

MEF 与 WCF

引言

在本文中,我将使用 WCF 创建一个数据访问层。我将使用 MEF 导出数据访问层类中的数据,然后导入它。

MEF 提供了一种很好的方式来创建可组合的应用程序,我可以轻松地导入和导出数据。

创建如图所示的 ADO.NET 实体数据模型

image001.jpg

创建如图所示的新 WCF 服务

image002.jpg

将向解决方案中添加两个文件,分别是 DataServiceIDataService.cs

IDataService.cs 中添加方法 GetArticles()

    [ServiceContract]
    public interface IDataService
    {
        [OperationContract]
        IEnumerable GetArticles();
    }

DataService.cs 中实现该方法

   public IEnumerable GetArticles()
        {
            PublishingCompanyEntities context = new PublishingCompanyEntities();
            var article = from art in context.Articles
                          select art.Title;

            return article;
        }

创建数据类

  1. 创建一个名为 Data 的类。
    class Data
        {
    
        }
  2. 添加一个名为 Articles 的属性。
    class Data
        {
            public IEnumerable Articles { get; set; }
        }
  3. 添加方法 GetData()。调用 DataServiceGetArticles() 方法。
    class Data
        {
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  Articles =  ds.GetArticles();
            }
        }
  4. 在属性 Articles 上添加 Export 特性。
    class Data
        {
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  ds.GetArticles();
            }
        }
  5. 还在 Data 类上添加一个 Export 特性。
    [Export]
        class Data
        {
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return   ds.GetArticles();
            }
        }
  6. 我需要设置 Articles 属性的值。我将在 Data 类的构造函数中执行此操作。所以这是我的最终类
    [Export]
        class Data
        {
            public Data()
            {
                Articles = GetData();
            }
    
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  Articles =  ds.GetArticles();
            }
        }

创建另一个类 App

  1. 创建一个类 App
    class App
        {
        }
  2. 添加一个方法 Run() 并放入代码以组合容器。
    class App
        {
            public void Run()
            {
                var catalog = new AssemblyCatalog
       (System.Reflection.Assembly.GetExecutingAssembly());
    
                var container = new CompositionContainer(catalog);
                container.ComposeParts(this);
    
            }
        }
  3. 创建一个属性 Articles,这次添加一个 import 特性。
    class App
        {
            [Import]
            public IEnumerable Articles { get; set;}
    
            public void Run()
            {
                var catalog = new AssemblyCatalog
       (System.Reflection.Assembly.GetExecutingAssembly());
    
                var container = new CompositionContainer(catalog);
                container.ComposeParts(this);
            }
        }
  4. 创建 Data 类的对象并 Import 它。
    class App
        {
            [Import]
            public IEnumerable Articles { get; set;}
    
            [Import]
            Data data;
    
            public void Run()
            {
                var catalog = new AssemblyCatalog
       (System.Reflection.Assembly.GetExecutingAssembly());
    
                var container = new CompositionContainer(catalog);
                container.ComposeParts(this);
            }
        }
  5. 通过文章添加一个 foreach 循环。
    class App
        {
            [Import]
            public IEnumerable Articles { get; set;}
    
            [Import]
            Data data;
    
            public void Run()
            {
                var catalog = new AssemblyCatalog
       (System.Reflection.Assembly.GetExecutingAssembly());
    
                var container = new CompositionContainer(catalog);
                container.ComposeParts(this);
    
    
                foreach (string art in Articles)
                {
                    Console.WriteLine(art);
                }
            }
        }

请注意,添加 ExportImport 特性需要包含 System.ComponentModel.Composition

现在调用 App 类。

static void Main(string[] args)
     {
       App a = new App();
       a.Run();
       Console.ReadKey();
     }

它有效! 编码愉快。

历史

  • 2011 年 7 月 23 日:初始版本
© . All rights reserved.