When a factory must decide at runtime which concrete class to instantiate based on a string or configuration value.
public static ObjectActivator CreateActivator(ConstructorInfo ctor)
var paramExpr = Expression.Parameter(typeof(object[]), "args");
var argExprs = ctor.GetParameters().Select((p, i) =>
Expression.Convert(Expression.ArrayIndex(paramExpr, Expression.Constant(i)), p.ParameterType));
var newExpr = Expression.New(ctor, argExprs);
var lambda = Expression.Lambda<Func<object[], object>>(newExpr, paramExpr);
return lambda.Compile();
EF 6, compatible with .NET 4.6.1, used dynamic proxies created via Activator for lazy loading. activators dotnet 4.6.1
Early DI frameworks or custom containers used Activator.CreateInstance to resolve services dynamically. When a factory must decide at runtime which