Wątek przeniesiony 2014-01-09 16:57 z Newbie przez somekind.

Jak stworzyć aplikację w .Net, do której można dodawać nowe funkcje jako pluginy?

0

Witam.

Chcialbym napisac aplikacje w .net do ktorej mozna dodawac nowe funkcje jako pluginy.
Najlepiej aby te pluginy mogly byc dodawane bez ponownego kompilowania aplikacji.

Mam juz czesc glownej aplikacji.
Ale teraz mam problem - Jak z gownej aplikacji wywolac View z pluginu ??

Moze mozecie mnie jakos Naprowadzic ?

Dzieki i pozdrawiam

0

Dla Przykladu ...

Tworze nowy plugin jako osobna aplikacje MVC ...  ( dla przykladu zwykla aplikacja jeden kontroler i jedno View - dla wyswietlenia jakiegos textu).
Kompiluje to ... 

I teraz chcial bym to wgrac do katalogu w glownej aplikacji
i bez ponownego kompilowania glownej aplikacji ... wyswietlic to view w jakims div'ie...

0

O takie cos mi chodzi ... ale chcialbym stworzyc cos protszego...

Jestem w punkcie gdzie mam glowna aplikacje i prosty plugin ..... plik dll od pluginu kopiuje go folderu bin glownej aplikacji...
Caly kod pluginu znajduje sie w folderze Plugins w glownej aplikacji...

Startuje glowna applikacje w przegladarce daje ....../TestPlugin

i dostaje cos takiego :

 
Server Error in '/' Application.

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/TestPlugin/Index.aspx
~/Views/TestPlugin/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/TestPlugin/Index.cshtml
~/Views/TestPlugin/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

Nie wiem czy ide w dobrym kierunku ale by zlikwidowac ten blad musze zarejestrowac nowe routes ???
Jesli tak to moge prosic o mala pomoc ??
Dzieki...

0

Mnie by też coś takiego interesowało, ale dla appki desktopowej, a nie www.

0

Ja mam taki sposób, który na pewno działa i dla apki desktopowej i dla WWW.

Po pierwsze, tworzysz interfejs, który nazywa się na przykład "IPlugin" zawierający metody wywoływane z aplikacji macierzystej, które pozwolą porozumieć się z pluginem, powinien to być wyczerpujący zestaw metod, dostosowany do potrzeb kazdego przewidywanego pluginu.

Następnie, jak plugin jest wczytywany z pliku, to w miejscu wczytania pluginu z pliku jest taki kod:

                Assembly As = Assembly.LoadFrom(@"D:\Progs\JakisPlik.dll"); // Nazwa pliku zawierający żądany plugin
                IPlugin = (IPlugin)As.CreateInstance("KlasaPluginu"); // Klasa pluginu dziedzicząca po interfejsie IPlugin

Natomiast sam plugin tworzysz poprzez utworzenie zwykłego Class Library, do referencji dodajesz aplikację macierzystą, jest to plik EXE w przypadku desktopowej lub plik DLL w przypadku webowej.

Wtedy w ramach projektu wtyczki powinien być widoczny wspomniany interfejs IPlugin, natomiast klasa, która będzie klasą główną pluginu musi dziedziczyć po interfejscie IPlugin i zawierać metody zdefiniowane w interfejsie IPlugin. Jeżeli każdy plugin będzie w osobnym pliku, to można przyjąć jedną nazwę dla klasy głównej każdego pluginu i tą nazwę na sztywno wpisać w kodzie aplikacji macierzystej.

Przy tak wczytanym pluginie można wywoływać metody tak, jakby to była część aplikacji macierzystej. Oczywiście można w ten sposób wywoływać tylko metody zdefiniowane w interfejsie.

                IPlugin.MetodaPluginu();

W zależności od potrzeb, zamiast interfejsu możesz utworzyć dodatkową klasę wspólną dla pluginów i każdy plugin będzie mógł dziedziczyć po tej klasie.

0

Dobre rozwiazanie ale nie w moim przypadku... Mi chdzi o to aby kazdy z pluginow mogl byc takze robiony w MVC.
Troszke czytalem przez weekend i mysle ze MEF moze byc rozwiazaniem ....

1 użytkowników online, w tym zalogowanych: 0, gości: 1