/// <summary> Create an instance of a type assuming a parameterless constructor. </summary> public object CreateInstance(Type implementationType) { // activator if (_emptyActivators.TryGetValue(implementationType, out var activator)) { return(activator()); } var ctor = implementationType.GetConstructor(Type.EmptyTypes); _emptyActivators[implementationType] = activator = DynamicMethodFactory.Build(implementationType, ctor); return(activator()); }
/// <summary> Create an instance of a type assuming a parameterless constructor. </summary> public object CreateInstance(Type implementationType) { // activator ParameterlessObjectActivator activator; if (!_emptyActivators.TryGetValue(implementationType, out activator)) { ConstructorInfo ctor = implementationType.GetConstructor(Type.EmptyTypes); _emptyActivators[implementationType] = activator = DynamicMethodFactory.Build(implementationType, ctor); } return(activator()); }
/// <summary> Create an instance of a type assuming a parameterless constructor. </summary> public object CreateInstance(Type type) { Contract.Assert(!type.IsAbstract && !type.IsInterface, "Cannot create instances of static, abstract, or interface types."); // activator if (_emptyActivators.TryGetValue(type, out var activator)) { return(activator()); } var ctor = type.GetConstructor(Type.EmptyTypes); _emptyActivators[type] = activator = DynamicMethodFactory.Build(type, ctor); return(activator()); }
/// <summary> Create an instance of a type assuming a set of parameters. </summary> public object CreateInstance(Type implementationType, object[] args) { if (args == null || args.Length == 0) { return(CreateInstance(implementationType)); } // activator if (!_activators.TryGetValue(implementationType, out var activator)) { var ctor = GetOrCacheConstructorForType(implementationType); var parameters = GetOrCacheParametersForConstructor(ctor); _activators[implementationType] = activator = DynamicMethodFactory.Build(implementationType, ctor, parameters); } return(activator(args)); }