ARTICLE

MEF With WCF - Start UP

Posted by Mahadesh Mahalingappa Articles | WCF with C# July 23, 2011
In this article I will be creating a Data Access Layer using WCF. I will be using MEF to export the data from the Data Access Layer class and then import it.
Reader Level:
Download Files:
 


In this article I will be creating a Data Access Layer using WCF. I will be using MEF to export the data from the Data Access Layer class and then import it.

MEF offers a nice way to create Composable applications where I can easily import and export data.

Created a ADO.Net Entity Data Model as shown in diagram below:

WCF1.gif

Create a new WCF Service as shown below:

WCF2.gif

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 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 the Articles Property. I will do that in the Contructor of the 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 to iterate 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 to add the Export and Import attributes you need to add a reference to 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.

Login to add your contents and source code to this article
post comment
     

Thanks

Posted by he Feb 28, 2013

Helpful Article

Posted by Angelina Erin Jul 26, 2011

Good logic mahadesh.....

Posted by Riya Sehgal Jul 26, 2011
COMMENT USING
PREMIUM SPONSORS
DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and add new content to existing PDF documents from within your applications.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.