Потрібно якийсь спосіб об'єднувати об'єкт із сторонньої DLL до об'єкта з локального класу

Довідкова інформація: на моєму веб-сайті 3-сторонний модуль HTTP створює набір об'єктів у кеші HttpRuntime. У моєму проекті веб-додатки мені потрібно вивчити ці об'єкти в кеш-пам'яті та виконувати різні дії, якщо знайдено об'єкт з певним значенням властивості.

Отже, я цитую через колекцію кеш-пам'яті, намагаюсь віддати кожен об'єкт в екземпляр локального класу (який тотожний конструкції класу сторонніх).

(Я знаю, що можу створити посилання на 3-стороння збірку, але збірка може бути не встановлена, тому я намагаюся створити більш надійний метод).

Проте кидок не працює. ASP.NET знає, що вихідний об'єкт походить з іншої збірки. Це виняток:

[A] 3rdParty.HttpModule.CachedRequest не можна відкидати   [B] 3rdParty.HttpModule.CachedRequest. Тип А походить від   '3rdParty.HttpModule, Version = 3.6.0.0, Culture = нейтральний,   PublicKeyToken = null 'у контексті' Default 'у місці   '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 = neutral, PublicKeyToken = null 'у контексті' Default 'у   розташування "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \" тимчасово   ASP.NET   Файли \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 8bfb9ba0 \ 0c053836_8595cc01 \ MyCompany.MyWebsite.DLL '.

Все, що я повинен зробити, це перевірити значення 1 властивості рядка в об'єкті. Чи існує якийсь (простий) спосіб зробити це? Навіть серіалізація об'єкта до рядка і розбір рядка буде в порядку.

Дякую

0

2 Відповіді

.NET сильно вводиться, так ні, ви не можете передати об'єкт у щось інший тип - навіть якщо макет пам'яті буває ідентичним, .NET знає, що вони різні типи.

Щоб прочитати властивість об'єкта, не маючи посилання на компіляцію на його збірці, вам слід скористатись як Reflection, або dynamic . dynamic , ймовірно, простіше.

dynamic theObject =//get the object from the cache
DoSomethingWith(theObject.TheProperty);
3
додано
Ідеально. Цей (динамічний) саме те, що я потребував і простий у здійсненні. Дякую!
додано Автор Laurence, джерело

Якщо вам потрібно повторити такі кроки у своїй заявці, я б рекомендував використовувати Mapper.

AutoMapper would do what you want.

Він копіює зміст змінних з об'єкта, до змінних в іншому об'єкті (імена змінних мають співпадати).
Потім ви можете працювати з повністю редагованим об'єктом (додавання інтерфейсів, успадкування тощо), а потім повернути його назад до оригінального стороннього об'єкта, як тільки ви це зробите.

1
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug