Need help understanding "Activator.CreateInstance" (ASP.NET 2.0 / C#)

Posted on 2007-11-15
Last Modified: 2013-11-07
I'm trying to get this concept because I want to use it. Bascially the end result is having an interchangable data access layer (Switching from SqlClient to OracleClient for example). Below is the core code that I'm trying to understand:

      static public ArticlesProvider Instance
            _instance = (ArticlesProvider)Activator.CreateInstance(Type.GetType(DAL.SqlClient.SqlArticlesProvider));
            return _instance;

I found this snippet on the web but it's incomplete and couldn't find the rest of it. What I don't understand is what does Activator.CreateInstance do and is this really saying that it creating an instance of an entire namespace?
Question by:bemara57
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
LVL 30

Expert Comment

ID: 20295708
From msdn (
Activator.CreateInstance Method

Creates an instance of the specified type using the constructor that best matches the specified parameters.

Not sure about ASP.

E.g., in Remoting it may means thta no server instance is created before first clien call. You do not create an object by calling constructor but rather ask activator to get an instance. Srver object may be different type so the problem is that the *type* of object to create isn't know until runtime.  Activator helps to solve the problem.

Author Comment

ID: 20299557
Thanks but I can't get it to work in my website. Here's what I did but don't understand what the problem is:

namespace Company.DAL
    public abstract class ConfigProvider
        static private ConfigProvider _instance = null;
        static public ConfigProvider Instance
                if (_instance == null)
                    _instance = (ConfigProvider)Activator.CreateInstance(
                return _instance;

        public abstract string GetConfigValue(ConfigXML site, string id, string name);

Then in the "interchangable" data access layer I have this:
namespace Company.DAL.MdbClient
    public class MdbConfig : ConfigProvider
        public override string GetConfigValue(ConfigXML site, string id, string name)
                string connString = WebConfigurationManager.ConnectionStrings[site.SettingsTable.ConnectionStringName].ConnectionString;
                string sqlCmd = "SELECT Value FROM " + site.SettingsTable.TableName + " WHERE UCASE(id)='" + id.ToUpper() + "' AND UCASE(name)='" + name.ToUpper() + "'";

                using (OleDbConnection conn = new OleDbConnection(connString))
                    OleDbCommand cmd = new OleDbCommand(sqlCmd, conn);

                    object obj = cmd.ExecuteScalar();

                    if (obj.Equals(System.DBNull.Value))
                        return string.Empty;
                        return (string)obj;
                return string.Empty;

Then in my aspx page I'm calling the method like this:
ConfigProvider.Instance.GetConfigValue(domain, "company", "Address1");

But I get this error:
Compiler Error Message: CS0119: 'Company.DAL.MdbClient.MdbConfig' is a 'type', which is not valid in the given context
Source Error:
Line 21:                 if (_instance == null)
Line 22:                     _instance = (ConfigProvider)Activator.CreateInstance(
Line 23:                        Type.GetType(Company.DAL.MdbClient.MdbConfig));
Line 24:                 return _instance;
Line 25:             }
What am I doing wrong??

Accepted Solution

adam_ingeniti earned 500 total points
ID: 20318010
I think you're mostly correct - you just need to use


instead of


... GetType() is only a valid method on actual INSTANCES...  whereas typeof() works when you're referring to an actual TYPE.

Try it and see if your code works?

            (new DataBinder()).GetType();

Author Comment

ID: 20327604
That worked! Thanks for the help, it's exactly how I needed it to work.

Featured Post

Want Experts Exchange at your fingertips?

With Experts Exchange’s latest app release, you can now experience our most recent features, updates, and the same community interface while on-the-go. Download our latest app release at the Android or Apple stores today!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question