Это довольно просто. Предположим, что ваше имя класса Car
, а пространство имен - Vehicles
, затем передайте параметр как Vehicles.Car
, который возвращает объект типа Car
. Подобным образом вы можете создать любой экземпляр любого класса динамически.
public object GetInstance(string strNamesapace)
{
Type t = Type.GetType(strNamesapace);
return Activator.CreateInstance(t);
}
Если ваше Полноценное имя (т. Е. Vehicles.Car
в этом случае) находится в другой сборке, Type.GetType
будет null. В таких случаях вы прокручиваете все сборки и находите Type
. Для этого вы можете использовать приведенный ниже код
public object GetInstance(string strFullyQualifiedName)
{
Type type = Type.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
type = asm.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
}
return null;
}
. Вы можете получить экземпляр, вызвав вышеуказанный метод.
object objClassInstance = GetInstance("Vehicles.Car");
Для тех, кто использует boto3 (python 3) для загрузки и имеет странные символы вместо частотной коррекции (такой как на португальском и французском языках, например), Toni Chaz и Sony Kadavan , ответы дали мне подсказку для фиксации. Добавление"; charset=utf-8" к аргументу ContentType при вызове put_object был достаточно к частотной коррекции быть показанным правильно.
content_type="text/plain;charset=utf-8"
bucket_obj.put_object(Key=key, Body=data, ContentType=content_type)