using System.Reflection;
using System.Globalization;
+using System.Runtime.Remoting;
+using System.Threading;
namespace System
{
throw new ArgumentException(SR.Arg_MustBeType, nameof(type));
}
+ [System.Security.DynamicSecurityMethod]
+ public static ObjectHandle CreateInstance(string assemblyName, string typeName)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstanceInternal(assemblyName,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ null,
+ ref stackMark);
+ }
+
+ [System.Security.DynamicSecurityMethod]
+ public static ObjectHandle CreateInstance(string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstanceInternal(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ ref stackMark);
+ }
+
+ [System.Security.DynamicSecurityMethod]
+ public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttributes)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstanceInternal(assemblyName,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ activationAttributes,
+ ref stackMark);
+ }
+
+ private static ObjectHandle CreateInstanceInternal(string assemblyString,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes,
+ ref StackCrawlMark stackMark)
+ {
+ Type type = null;
+ Assembly assembly = null;
+ if (assemblyString == null)
+ {
+ assembly = RuntimeAssembly.GetExecutingAssembly(ref stackMark);
+ }
+ else
+ {
+ RuntimeAssembly assemblyFromResolveEvent;
+ AssemblyName assemblyName = RuntimeAssembly.CreateAssemblyName(assemblyString, out assemblyFromResolveEvent);
+ if (assemblyFromResolveEvent != null)
+ {
+ // Assembly was resolved via AssemblyResolve event
+ assembly = assemblyFromResolveEvent;
+ }
+ else if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime)
+ {
+ // WinRT type - we have to use Type.GetType
+ type = Type.GetType(typeName + ", " + assemblyString, true /*throwOnError*/, ignoreCase);
+ }
+ else
+ {
+ // Classic managed type
+ assembly = RuntimeAssembly.InternalLoadAssemblyName(
+ assemblyName, null, ref stackMark,
+ true /*thrownOnFileNotFound*/);
+ }
+ }
+
+ if (type == null)
+ {
+ // It's classic managed type (not WinRT type)
+ if (assembly == null)
+ return null;
+
+ type = assembly.GetType(typeName, true /*throwOnError*/, ignoreCase);
+ }
+
+ object o = Activator.CreateInstance(type,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+
+ return (o != null) ? new ObjectHandle(o) : null;
+ }
+
+ public static ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName)
+ {
+ return CreateInstanceFrom(assemblyFile, typeName, null);
+ }
+
+ public static ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
+ {
+ return CreateInstanceFromInternal(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+ }
+
+ public static ObjectHandle CreateInstanceFrom(string assemblyFile, string typeName, object[] activationAttributes)
+ {
+ return CreateInstanceFrom(assemblyFile,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ activationAttributes);
+ }
+
+ private static ObjectHandle CreateInstanceFromInternal(string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ Assembly assembly = Assembly.LoadFrom(assemblyFile);
+ Type t = assembly.GetType(typeName, true, ignoreCase);
+
+ object o = Activator.CreateInstance(t,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+
+ return (o != null) ? new ObjectHandle(o) : null;
+ }
+
public static T CreateInstance<T>()
{
var rt = (RuntimeType)typeof(T);