У меня есть приложение Winform, где я хотел бы реализовать какой-то интерфейс для клиента, поэтому части кода могут быть изменены клиентом позже, если они нужно. Я считаю, что мой подход ошибочен, потому что я получил ошибку в Visual Studio после перекомпиляции моего приложения Winform. Ошибка: «Тип аргумента MyClass не присваивается типу параметра MyClass», но я все еще могу его перекомпилировать. Я волнуюсь, это нарушило бы позже ...Интерфейс прикладной программы Winform «Тип аргумента не присваивается типу параметра»
Это, как я не реализовал ее до сих пор:
- В моей WinForm приложения Я создал абстрактный класс с виртуальным методом.
- Я «выпускаю» сборку dll с открытым исходным кодом для клиента, где реализован этот абстрактный класс, и метод вызывает базовый метод в абстрактном классе. Если клиент хочет изменить метод, он просто реализует его самостоятельно.
- Этот проект с открытым исходным кодом затем ссылается и реализуется в моем приложении winform.
Когда клиент хотел бы изменить метод, который они реализуют, перекомпилируйте dll и замените новую dll той, которую я распространил вместе с моей сборкой.
У моего приложения winform есть свое сильное имя, а проект с открытым исходным кодом имеет свое сильное имя.
Однако, когда я перекомпилирую свое приложение Winform после ссылки на проект с открытым исходным кодом, я получаю эту ошибку: «Тип аргумента MyClass не присваивается типу параметра MyClass». Я все еще могу перекомпилировать проект. Но я обеспокоен тем, что реализация имеет некоторые серьезные недостатки и позже будет ломаться. Особенно, так как я реализовал WyBuild, где я буду распространять обновления для приложения Winform.
Мне нужно предоставить клиенту возможность изменить некоторые методы в приложении без доступа ко всему исходному коду. Как это можно достичь, если моя реализация неверна, каково ваше предложение?
Спасибо.
Мой хрустальный шар говорит, что у вас есть * два типа MyClass. Они пришли из разных сборок и поэтому никогда не совместимы. Это не может работать, плагин должен использовать тот же тип, что и хост. –
@HansPassant Я считаю, что ваш хрустальный шар правильный ... Я посмотрю на это. У меня есть тип приложения winform, который передается в конструктор унаследованного класса. Думаю, когда я перекомпилирую проекты, тип больше не то же самое, и поэтому я получаю ошибку. Я предполагаю, что есть намного лучшие решения для достижения того, что я пытаюсь сделать? Что было бы лучшим подходом к достижению того же? Некоторое время я искал поисковую информацию, не найдя полезной информации по этому вопросу. – jmelhus
Бойлер предназначен для установки типов, которые должен знать плагин в отдельной сборке. Что касается ссылки на хост и подключаемые проекты, они всегда соглашаются с типом. И вы одобряете их как интерфейсы, а не классы, поэтому связь минимизирована. Много и много советов, когда вы google ".net plugin architecture". –