Создать объект с помощью отражения от спутниковой сборки - PullRequest
1 голос
/ 31 мая 2011

У меня есть две сборки / проекты с DLL в качестве выходных данных: Модели и логика

Внутри логической DLL я хочу создать объект определенной модели с помощью отражения (На проект ссылаются, и я могу вручнуюсоздать экземпляр)

MyNameSpace.Models.Foo foo = new MyNameSpace.Models.Foo(); // works
Type type = Type.GetType("MyNameSpace.Models.Foo"); // returns null

Как я могу создать объект MyNameSpace.Models.Foo?Видимо тип не разрешается.Как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Вы должны будете использовать AssemblyQualifiedName.Смотрите эту статью: http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx для получения дополнительной информации.

В вашем случае, что-то вроде:

MyNamespace.Models.Foo, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

PublicKeyToken может быть длиннее, если вы подписали свои сборки.

Если вы не уверены, просто создайте экземпляр объекта обычным способом, а затем выполните:

Type objType = typeof(System.Array);

// Print the full assembly name.
Console.WriteLine ("Full assembly name: {0}.", objType.Assembly.FullName.ToString()); 

// Print the qualified assembly name.
Console.WriteLine ("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString());

(беззастенчиво прозванный из вышеупомянутой статьи)

1 голос
/ 31 мая 2011

Вы можете посмотреть, используя Activator.CreateInstance. Например:

Assembly assembly = Assembly.LoadFrom("Foo.dll");

Type type = assembly.GetType("TheNamspace.TheType");

object instanceOfMyType = Activator.CreateInstance(type);
0 голосов
/ 31 мая 2011

Аргумент Type.GetType имеет значение AssemblyQualifiedName: от MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...