Нужен способ приведения объекта из сторонней DLL к объекту из локального класса - PullRequest
0 голосов
/ 28 октября 2011

Справочная информация: на моем веб-сайте сторонний модуль HTTP создает коллекцию объектов в HttpRuntime Cache.В моем проекте веб-приложения мне нужно изучить эти объекты в кэше и предпринять различные действия, если найден объект с определенным значением свойства.

Итак, я перебираю коллекцию кэша, пытаясь привести каждыйвозражать против экземпляра локального класса (который идентичен дизайну стороннего класса).

(я знаю, что мог бы создать ссылку на стороннюю сборку, но сборка может быть не установлена,поэтому я пытаюсь создать более надежный метод).

Однако приведение не работает.ASP.NET знает, что исходный объект происходит из другой сборки.Это исключение:

[A] 3rdParty.HttpModule.CachedRequest не может быть приведено к [B] 3rdParty.HttpModule.CachedRequest.Тип A происходит от «3rdParty.HttpModule, Version = 3.6.0.0, Culture = нейтральный, PublicKeyToken = null» в контексте «По умолчанию» в расположении «C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET файлы \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 710995cc \ 37f36a76_71e5cb01 \ 3rdParty.HttpModule.dll '.Тип B происходит от «MyCompany.MyWebsite, Version = 1.4.0.1396, Culture = нейтральный, PublicKeyToken = null» в контексте «По умолчанию» в расположении «C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 8bfb9ba0 \ 0c053836_8595cc01 \ MyCompany.MyWebsite.DLL '.

Все, что мне нужно сделать, это проверить значение 1 строкового свойства в объекте.Есть ли какой-нибудь (простой) способ сделать это?Даже сериализация объекта в строку и разбор строки будут в порядке.

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

.NET строго типизирован, поэтому нет, вы не можете привести объект к чему-либо другого типа - даже если макет памяти окажется идентичным, .NET знает, что это разные типы.

Чтобы прочитать свойство объекта, не имея ссылки компиляции на его сборку, вам нужно использовать либо Reflection, либо dynamic. dynamic, вероятно, проще.

dynamic theObject = // get the object from the cache
DoSomethingWith(theObject.TheProperty);
1 голос
/ 28 октября 2011

Если вам нужно повторить такие шаги в вашем приложении, я бы порекомендовал использовать Mapper.

AutoMapper будет делать то, что вы хотите.

Он скопирует содержимое переменных из объекта в переменные другого объекта (имена переменных должны совпадать).
Затем вы можете работать с полностью редактируемым объектом (добавление интерфейсов, наследование и т. Д.), А затем «сопоставить» его с исходным сторонним объектом, как только вы закончите.

...