Click here to Skip to main content
Licence CPOL
First Posted 24 Jul 2011
Views 3,603
Downloads 113
Bookmarked 9 times

MEF with WCF – Start Up

By | 24 Jul 2011 | Article
MEF with WCF

Introduction

In this article, I would be creating a Data Access Layer using WCF. I would be using MEF to Export the Data from Data Access Layer class and then Import it.

MEF offers a nice way to create Composable apps where I can so easily Import and Export Data.

Create an ADO.NET Entity Data Model as shown in the diagram below:

image001.jpg

Create a new WCF Service as shown below:

image002.jpg

Two files would be added to the solution as DataService and IDataService.cs.

Add a method GetArticles() to IDataService.cs.

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

Implement the method in DataService.cs:

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

            return article;
        }

Creating a Data Class

  1. Create a class named as Data.
    class Data
        {
    
        }
  2. Add a property named as Articles.
    class Data
        {
            public IEnumerable Articles { get; set; }
        }
  3. Add the Method GetData(). Call the method GetArticles() of DataService.
    class Data
        {
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  Articles =  ds.GetArticles();
            }
        }
  4. Add the Export attribute on the property Articles.
    class Data
        {
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  ds.GetArticles();
            }
        }
  5. Also add an Export attribute on the Data Class.
    [Export]
        class Data
        {
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return   ds.GetArticles();
            }
        }
  6. I need to set the value of Articles property. I will do that in the constructor of Data class. So here is my final class:
    [Export]
        class Data
        {
            public Data()
            {
                Articles = GetData();
            }
    
            [Export]
            public IEnumerable Articles { get; set; }
    
            public  IEnumerable GetData()
            {
               DataService ds = new DataService();
               return  Articles =  ds.GetArticles();
            }
        }

Creating Another Class App

  1. Create a class App.
    class App
        {
        }
  2. Add a method Run() and put the code to compose the container.
    class App
        {
            public void Run()
            {
                var catalog = new AssemblyCatalog
       (System.Reflection.Assembly.GetExecutingAssembly());
    
                var container = new CompositionContainer(catalog);
                container.ComposeParts(this);
    
            }
        }
  3. Create a property Articles and this time add an import attribute.
    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. Create an object for the Data Class and Import it.
    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. Add a foreach through the articles.
    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);
                }
            }
        }

Please note that adding Export and Import attributes would need you to include the System.ComponentModel.Composition.

Call the App class now.

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

It works! Happy coding.

History

  • 23rd July, 2011: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Mahadesh Mahalingappa



India India

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 PinmemberPaul K T6:41 29 Dec '11  
GeneralMy vote of 1 Pinmemberamiramk23:12 27 Nov '11  
GeneralMy vote of 1 Pinmembervoloda29:59 25 Jul '11  
GeneralMy vote of 2 Pinmembermaq_rohit18:53 24 Jul '11  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 24 Jul 2011
Article Copyright 2011 by Mahadesh Mahalingappa
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid