Click here to Skip to main content
Click here to Skip to main content

Alternative to Activator.CreateInstance

By , 26 Jan 2012
 

The final solution after much debate and optimization:

public class DynamicInitializer
    {
        static readonly Dictionary<string, Func<object>> list = new Dictionary<string, Func<object>>();
 
        public static T New<T>() where T : class 
        {
            return New(typeof (T)) as T;
        }
 
        public static object New(Type type)
        {
            if (list.ContainsKey(type.Name)) return list[type.Name];
 
            Func<object> method = Expression.Lambda<Func<object>>(Expression.Block(type, new Expression[] { Expression.New(type) })).Compile();
            list.Add(type.Name, method);
            return method();
        }
    }

License

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

About the Author

Dean Oliver
Software Developer Comcorp Holdings
South Africa South Africa
Member
Bsc (Hons) Business Information Systems.
MCTS: Web Applications Development with Microsoft .NET Framework 4
MCTS: Windows Communication Foundation Development with Microsoft .NET Framework 4
MCTS: Accessing Data with Microsoft .NET Framework 4
Microsoft Certified Professional Developer Certification.

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.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralRe: Perhaps it would make it completely obvious looking at the c... PinmemberAndrew Rissing26 Jan '12 - 6:46 
GeneralRe: If you use TryGetValue, it uses an out parameter to set the ... PinmemberAndrew Rissing26 Jan '12 - 6:33 
GeneralRe: thanks Andrew appreciate that. Why is it quicker though? PinmemberDean Oliver26 Jan '12 - 5:50 
GeneralRe: If you do update this, I'd recommend using "TryGetValue" rat... PinmemberAndrew Rissing26 Jan '12 - 5:13 
GeneralRe: No problem. PinmvpPaulo Zemek26 Jan '12 - 5:02 
GeneralI think this last version is almost OK. In fact, if you know... PinmvpPaulo Zemek26 Jan '12 - 3:59 
GeneralBased on a comment by nonexisto, I realized that the constra... PinmemberAndrew Rissing26 Jan '12 - 3:49 

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

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 26 Jan 2012
Article Copyright 2012 by Dean Oliver
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid