Click here to Skip to main content
13,087,784 members (77,678 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


2 bookmarked
Posted 1 Jul 2011

Dynamic Loading of Objects using XML - Part 2

, 1 Jul 2011
Rate this:
Please Sign up or sign in to vote.
In Part 2 of Dynamic Loading of objects, I have created a custom Dependency Injection Framework


In this post, I try to extend what I explained in Part 1.

The objective is to design a custom Dependency Injection Framework. I personally like what Unity Framework does. But I would like to do the job myself.

Let's get on the job.

Continuing from Part I, the first step I did was do some code refactoring. This just makes the code a bit more readable and efficient.

Then I go ahead and add a class library project to my solution and name it as DI. Let's just delete the class that gets created with it.

I move the Container class from the existing project to the DI project.

I build the DI project and add a reference to the XMLReader project.

Now my solution looks as below:


Container class is as shown below:

using System;
using System.Xml;
using System.Reflection;

namespace DI
  public static  class Container
      public static Type CreateInstance()
          var reader = new XmlTextReader
          var assem = Assembly.GetCallingAssembly();

          while (reader.Read())
              if (reader.NodeType == XmlNodeType.Element)
                  Type type = null;
                  while (reader.MoveToNextAttribute()) // Read attributes

                      if (reader.Name == "Name")
                          type = assem.GetType(reader.Value); // typeName is a string

                  return type;

          return null;

As can be seen, this time around I use:

var assem = Assembly.GetCallingAssembly();  instead of GetExecutingAssembly();

This is because I am trying to access the XML from another class assembly. We cannot move the XML to another assembly since XML is part of the User configuration and should always reside on the client side. GetCallingAssembly() will load the assembly from which the call is being made, which in our case is XMLReader.

Well, that’s pretty much it .

There are no changes to Class A in XMlReader assembly... I have just removed unnecessary statements from the Program class in XMlReader assembly.

The code for the Program class in XMLReader looks as below:

using System;
using DI;

namespace XMLReader
    class Program
        static void Main(string[] args)
            var obj = Activator.CreateInstance( Container.CreateInstance());
            var m = Container.CreateInstance().GetMethod("SampleMethod");
            m.Invoke(obj, new Object[] { 42 });

Finally let's run our XMLReader project.



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


About the Author

You may also be interested in...

Comments and Discussions

-- There are no messages in this forum --
Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170813.1 | Last Updated 1 Jul 2011
Article Copyright 2011 by Mahadesh Mahalingappa
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid