Здравствуйте, DJazz, Вы писали:
DJ>У меня есть сборка она же ДЛЛ, я в ней создал простенький интерфейс
DJ>Теперь я создаю отдельную сборку с объектом который будет имплементировать интерфейс, как загрузить сборку с интерфейсом чтоб я потом смог написать
DJ>public class iBanks : crefInterface
Добавь референс на сборку с этим интерфейсом. В студии это right click на References -> Add Reference.
... << RSDN@Home 1.1.3 stable >>
Re[2]: Как использовать интерфейс из отдельной сборки
Здравствуйте, Walker, Вы писали:
W>Здравствуйте, DJazz, Вы писали:
DJ>>У меня есть сборка она же ДЛЛ, я в ней создал простенький интерфейс
DJ>>Теперь я создаю отдельную сборку с объектом который будет имплементировать интерфейс, как загрузить сборку с интерфейсом чтоб я потом смог написать
DJ>>public class iBanks : crefInterface
W>Добавь референс на сборку с этим интерфейсом. В студии это right click на References -> Add Reference.
У меня сборка с интерфейсом может лежать где угодно, т.е. пути будут известны только в ходе выполнения программы, мне наверно нужно
Object i = Activator.CreateInstanceFrom(......);
Но как ? Экземпляр интерфейса не создаш !
Re[3]: Как использовать интерфейс из отдельной сборки
Здравствуйте, DJazz, Вы писали:
DJ>У меня сборка с интерфейсом может лежать где угодно, т.е. пути будут известны только в ходе выполнения программы, мне наверно нужно
DJ>Object i = Activator.CreateInstanceFrom(......);
DJ>Но как ? Экземпляр интерфейса не создаш !
Ты путаешь design и runtime.
Для создания своей сборки тебе всяко нужна та dll, ибо там находится определение интерфейса. Так что — reference (возможно с CopyLocal = false)
При работе же система захочет получить ту сборку и если она у тебя бегает туда-сюда и на месте не лежит ( ), то лови что-то типа Domain.AssemblyResolve, ручками грузи эту сборку и отдавай системе.
А вообще-то, почему она бегает и "лежит где угодно"?
Re[4]: Как использовать интерфейс из отдельной сборки
Здравствуйте, Andrbig, Вы писали:
A>Здравствуйте, DJazz, Вы писали:
DJ>>У меня сборка с интерфейсом может лежать где угодно, т.е. пути будут известны только в ходе выполнения программы, мне наверно нужно
DJ>>Object i = Activator.CreateInstanceFrom(......);
DJ>>Но как ? Экземпляр интерфейса не создаш !
A>Ты путаешь design и runtime.
A>Для создания своей сборки тебе всяко нужна та dll, ибо там находится определение интерфейса. Так что — reference (возможно с CopyLocal = false)
A>При работе же система захочет получить ту сборку и если она у тебя бегает туда-сюда и на месте не лежит ( ), то лови что-то типа Domain.AssemblyResolve, ручками грузи эту сборку и отдавай системе.
A>А вообще-то, почему она бегает и "лежит где угодно"?
Интерфейс лежит в каждой БД и мне нужно грузить ее постоянно при старте базы данных, их может быть несколько путь я буду знать в момент старта программы, вот мне нужно как раз "ручками грузи эту сборку и отдавай системе" а с кодом чтоб ее ручками загрузить проблемы, как ее загрузить чтоб можно было интерфейс реализовать, даже не знаю с какой стороны подступиться
Re[5]: Как использовать интерфейс из отдельной сборки
Здравствуйте, DJazz, Вы писали:
DJ>Интерфейс лежит в каждой БД и мне нужно грузить ее постоянно при старте базы данных, их может быть несколько путь я буду знать в момент старта программы, вот мне нужно как раз "ручками грузи эту сборку и отдавай системе" а с кодом чтоб ее ручками загрузить проблемы, как ее загрузить чтоб можно было интерфейс реализовать, даже не знаю с какой стороны подступиться
Мне кажется, ты что-то очень серьезно путаешь. Интерфейс первичен, реализация — вторична, если можно так выразиться Нельзя реализовать то, чего не знаешь. Так что на этапе компиляции тебе в любом случае надо иметь эту сборку с интерфейсом. А вот насчет рантайма я тебя совершенно не понял. Может тебе наоборот надо реализацию динамически подгружать? Можешь подробнее описать что надо сделать?
В любом случае с динамической загрузкой тебе поможет класс Activator.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Как использовать интерфейс из отдельной сборки
Здравствуйте, Walker, Вы писали:
W>Здравствуйте, DJazz, Вы писали:
DJ>>Интерфейс лежит в каждой БД и мне нужно грузить ее постоянно при старте базы данных, их может быть несколько путь я буду знать в момент старта программы, вот мне нужно как раз "ручками грузи эту сборку и отдавай системе" а с кодом чтоб ее ручками загрузить проблемы, как ее загрузить чтоб можно было интерфейс реализовать, даже не знаю с какой стороны подступиться
W>Мне кажется, ты что-то очень серьезно путаешь. Интерфейс первичен, реализация — вторична, если можно так выразиться Нельзя реализовать то, чего не знаешь. Так что на этапе компиляции тебе в любом случае надо иметь эту сборку с интерфейсом. А вот насчет рантайма я тебя совершенно не понял. Может тебе наоборот надо реализацию динамически подгружать? Можешь подробнее описать что надо сделать? W>В любом случае с динамической загрузкой тебе поможет класс Activator.
Сенкс, кажется понял где лапухнулся, попробую если что еще спрашу.
Re[6]: Как использовать интерфейс из отдельной сборки
Здравствуйте, Walker, Вы писали:
W>Здравствуйте, DJazz, Вы писали:
DJ>>Интерфейс лежит в каждой БД и мне нужно грузить ее постоянно при старте базы данных, их может быть несколько путь я буду знать в момент старта программы, вот мне нужно как раз "ручками грузи эту сборку и отдавай системе" а с кодом чтоб ее ручками загрузить проблемы, как ее загрузить чтоб можно было интерфейс реализовать, даже не знаю с какой стороны подступиться
W>Мне кажется, ты что-то очень серьезно путаешь. Интерфейс первичен, реализация — вторична, если можно так выразиться Нельзя реализовать то, чего не знаешь. Так что на этапе компиляции тебе в любом случае надо иметь эту сборку с интерфейсом. А вот насчет рантайма я тебя совершенно не понял. Может тебе наоборот надо реализацию динамически подгружать? Можешь подробнее описать что надо сделать? W>В любом случае с динамической загрузкой тебе поможет класс Activator.
А можно ли вынести интерфейс в отдельную сборку, и если можно как его использовать, т.е. что нужно сделать чтоб сборку загрузить и реализовать интерфейс из нее.
Re[7]: Как использовать интерфейс из отдельной сборки
Здравствуйте, Walker, Вы писали:
W>Добавь референс на сборку с этим интерфейсом. В студии это right click на References -> Add Reference.
Кстати в оболочке студии с References есть неприятная проблема — оболочка в определённый момент блокирует сборку (сборки) из этого списка и после этого сборку не перекомпилировать, не удалить и не переименовать. Особенно это любит делать C# — все сборки блокируются намертво после первой компиляции (хотя, необязательно). MC++ — проекты тоже этим грешат, но не так часто. Мы не проверяли достоверно, после чего и в какой момент блокируются сборки, не до того было. Для проектов MC++ был найден выход — #using сборки в файле stdafx.h. Для C# остаётся только делать выход-вход из студии и/или удаление Reference из проекта и добавление её обратно. Очень удобно, согласитесь, особенно в условиях командной работы, использования SourceSafe и т.д.
Re[3]: Как использовать интерфейс из отдельной сборки
Здравствуйте, DILL, Вы писали:
DIL>Здравствуйте, Walker, Вы писали:
W>>Добавь референс на сборку с этим интерфейсом. В студии это right click на References -> Add Reference.
DIL>Кстати в оболочке студии с References есть неприятная проблема — оболочка в определённый момент блокирует сборку (сборки) из этого списка и после этого сборку не перекомпилировать, не удалить и не переименовать. Особенно это любит делать C# — все сборки блокируются намертво после первой компиляции (хотя, необязательно). MC++ — проекты тоже этим грешат, но не так часто. Мы не проверяли достоверно, после чего и в какой момент блокируются сборки, не до того было. Для проектов MC++ был найден выход — #using сборки в файле stdafx.h. Для C# остаётся только делать выход-вход из студии и/или удаление Reference из проекта и добавление её обратно. Очень удобно, согласитесь, особенно в условиях командной работы, использования SourceSafe и т.д.
Большой сенкс за инфу
Re[7]: Как использовать интерфейс из отдельной сборки
Здравствуйте, DJazz, Вы писали:
DJ>А можно ли вынести интерфейс в отдельную сборку, и если можно как его использовать, т.е. что нужно сделать чтоб сборку загрузить и реализовать интерфейс из нее.
Не можно, а нужно! Должно быть три сборки:
1. объявление интерфейса
2. основная программа. Ссылается на 1.
3. сборка из базы. Ссылается на 1.
Схема такова. Основная программа загружается и поскольку там ссылка на 1., то грузит и ее. Ты грузишь другую сборку (из базы), получаешь Assembly. Вызываешь у нее >CreateInstance и полученный object кастишь в интерфейс из сборки 1.
Все. Объект есть, нужный интерфейс он реализует. Вперед!