Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масштабируемое приложение на vb.net 
:(
    Опции темы
asper
Дата 10.8.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Есть задача - создать масштабируемое приложение на vb.net
Технология незнакомая. Море статей и форумов сводит задачу к созданию некого главного приложения и плагинов к нему. При этом возникает ряд вопросов:
1) Может ли плагин содержать интерфейсную часть (формы и прочее) или это надо реализовывать отдельно (классом Interface? как?) ?
2) Есть такое понятие как domain Application. Хотелось бы уточнить его смысл. Когда его стоит применять? как? не будет ли это в ущерб скорости работы приложения?
3) Проблема в том, что в зависимости от прав пользователей должно загружаться меню соответствующего вида, пункты которого - вызовы плагинов.
Может быть, кто-нибудь подскажет, где можно взглянуть близкий по смыслу пример - нахожу в основном консольные приложения, а интересует - windows.forms.
Может быть, кто-то может подсказать толковые книжки?
Заранее спасибо огромное!
PM MAIL   Вверх
mr.DUDA
Дата 10.8.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Модератор: Пожалуйста, один топик - один вопрос.

Цитата(asper @ 10.8.2005, 10:20)
1) Может ли плагин содержать интерфейсную часть (формы и прочее) или это надо реализовывать отдельно (классом Interface? как?) ?

Любая assembly может содержать любое количество форм и прочих компонентов. Если явно подключить (через reference) эту assembly к проекту, в проекте станут доступны все public-формы и компоненты из неё. Если нужно подключить одну assembly к другой в рантайме (как плагин), то всё что требуется для того, чтобы показать форму - это создать экземпляр формы и вызвать Show/ShowDialog. Сделать это можно как внутри плагина, так и вне его. Для того, чтобы вызывающая assembly могла показать форму из assembly-плагина, можно создать интерфейс, о котором будут знать обе assembly, и который будет содержать метод типа GetMySuperForm или ShowAnotherForm. Тут всё зависит от фантазии разработчика.

Цитата(asper @ 10.8.2005, 10:20)
2) Есть такое понятие как domain Application. Хотелось бы уточнить его смысл. Когда его стоит применять? как? не будет ли это в ущерб скорости работы приложения

Application Domain - это среда, в которой исполняется приложение. Обычно не требуется создание более чем одного домена; дефолтный домен создаётся автоматически и в нём исполняется ф-ция Main. Тормоза могут появляться при передаче вызова между двумя доменами, т.к. домены полностью отделены друг от друга и для вызова метода из другого домена используется маршаллинг.

Цитата(asper @ 10.8.2005, 10:20)
3) Проблема в том, что в зависимости от прав пользователей должно загружаться меню соответствующего вида, пункты которого - вызовы плагинов.

Где проблема ? smile

Цитата(asper @ 10.8.2005, 10:20)
Может быть, кто-то может подсказать толковые книжки?

Книг полно в соответствующем разделе форума.


--------------------
user posted image
PM MAIL WWW   Вверх
asper
Дата 11.8.2005, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Спасибо за ответы.
Оставляю один вопрос smile
Цитата

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

Где проблема ? 


Проблема в том, что я не знаю, как это сделать. Т.е. как организовать плагин и вызвать его как dll из основной программы. Примеры консольных приложений есть, причем не слишком понятные - много необъясняемых и некомментируемых наворотов, а вот насчет windows-приложений... поиски не принесли успеха, и переделать не удается. smile

Может быть, поможете примерчиком? smile

PM MAIL   Вверх
asper
Дата 11.8.2005, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Кстати, практически ни одна книга не закачивается - прокси ругается smile
PM MAIL   Вверх
asper
Дата 11.8.2005, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Вызвать плагин получилось. Но не улавливаю, как сделать, чтобы после компиляции dll записывалась в определенный каталог dll-ек, откуда основная программа и будет их брать.
Создание файла plag_app.config в каталоге плагина не помогло...
Код

<configuration>
    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="c:\devel\dll" />
    </assemblyBinding>
    </runtime>
    </configuration>

Что не так?

PM MAIL   Вверх
mr.DUDA
Дата 11.8.2005, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Проще всего dll-ки складывать в отдельную папку "bin" внутри директории основной программы. Тогда загрузить плагин можно не указывая путь к длл-ке: Assembly.Load ("plugin.dll"). Если этот вариант не подходит, можно размещать длл-ки где угодно, и грузить их с пом. Assembly.LoadFrom. Тэг assemblyBinding и qualifyAssembly используется, когда нужно иметь возм-сть грузить длл-ки из GAC с пом. Assembly.Load (partialName).


--------------------
user posted image
PM MAIL WWW   Вверх
asper
Дата 11.8.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Спасибо за ответ.
Но имелось в виду, что можно ли сделать так, чтобы при компиляции библиотеки она автоматически закидывалась в конкретный каталог, дабы разработчику плагина не надо было вручную копировать ее туда, откуда ее потом возьмет основная программа.
А если вопрос касается тоже загрузки плагина, то можно его поместить в эту же тему или надо создавать новую?
Дело в том, что не ясно, как проверить, что форма, представляющая собой плагин, запущена в одном экземпляре.
Если нужно - вот код запуска плагина
Код

    Public Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
            Dim extAssembly As System.Reflection.Assembly = _
             System.Reflection.Assembly.LoadFrom("c:\devel\dll\plag_app.dll")

            Dim extForm As Form = _
                 extAssembly.CreateInstance("plag_app.Form1", True)
            Me.AddOwnedForm(extForm)

            'Активизируем дочернее окно (extForm)
            extForm.Show()
    End Sub


PM MAIL   Вверх
asper
Дата 11.8.2005, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



И еще, а как в случае с плагинами разрешится такая ситуация: пользователь работает с программой, использующей плагин. В этот момент разработчик заменяет плагин на более новую версию. Как поведет себя программа пользователя и как разрешить такую ситуацию?
PM MAIL   Вверх
mr.DUDA
Дата 11.8.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Ух, сколько вопросов... smile

Цитата(asper @ 11.8.2005, 11:13)
так, чтобы при компиляции библиотеки она автоматически закидывалась в конкретный каталог, дабы разработчику плагина не надо было вручную копировать ее туда, откуда ее потом возьмет основная программа.

Свойства проекта, "Output directory".

З.Ы. у тебя студия скопирует длл-ку куда надо, а что будет у пользователя? Тоже VS.NET ему поставишь smile ?

Цитата(asper @ 11.8.2005, 11:13)
А если вопрос касается тоже загрузки плагина, то можно его поместить в эту же тему или надо создавать новую?

Ладно уж, и так нафлудили. Давай тут разбираться.

Цитата(asper @ 11.8.2005, 11:13)
Дело в том, что не ясно, как проверить, что форма, представляющая собой плагин, запущена в одном экземпляре.

Больше чем в одном экземпляре ты одну длл-ку не загрузишь, это факт. Чтобы определить, сколько форм одного типа у тебя создано, используй статическую переменную-счётчик, либо сделай форму синглтоном.

Цитата(asper @ 11.8.2005, 11:24)
И еще, а как в случае с плагинами разрешится такая ситуация: пользователь работает с программой, использующей плагин. В этот момент разработчик заменяет плагин на более новую версию. Как поведет себя программа пользователя и как разрешить такую ситуацию?

Насчёт версионности есть много умных статей, но как я сейчас это себе представляю: если длл-ка не подписана ключом, то её версия подойдёт для основной программы в случае, если эта версия не более старая, чем та, с которой программа работала ранее (т.е. та, которая указана в references основной программы). Если же подписана, то там свои правила.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.