2015-04-09 20 views
5

Pracuję nad projektem i mam wiele pod modułów. Kiedy tworzę kolejny submoduł, musimy skompilować projekt i ponownie go wdrożyć. To niezbyt fajne ...Dołączanie biblioteki dynamicznej z sieci

Chciałbym stworzyć trochę logiki, aby zautomatyzować moją pracę. Moim pomysłem jest przesłanie modułu podrzędnego do magazynu BLOBa Azure, a następnie mój projekt pobiera moduł podrzędny i zawiera ten moduł podrzędny w moim projekcie, bez kompilowania całego projektu.

Nie wiem, jak dokonać integracji z istniejącym oprogramowaniem.

Jak mogę to zrobić?

+0

Integracja z istniejącym oprogramowaniem. Mam idee, ale nie wiem jak to zrobić –

Odpowiedz

1

Masz kilka opcji. Najprostszym moim zdaniem jest stworzenie ogólnego interfejsu, takiego jak IPlugin. Zaimplementuj to w swoim zdalnym zgromadzeniu i pozwól, aby aplikacja to sprawdzała.

IPluginManager manager = this; // let this class implement IPluginManager 

Assembly assembly = Assembly.LoadFile(downloadedFilePath); 

foreach (Type type in assembly.GetTypes()) 
{ 
    foreach (Type interfaceType in type.FindInterfaces 
            (delegate(Type m, object filterCriteria) 
            { 
             return m.FullName == typeof(IPlugin).FullName; 
            } 
            , null 
            ) 

      ) 
    { 
     IPlugin plugin = (IPlugin)Activator.CreateInstance(interfaceType); 
     plugin.Activate(manager); 
    } 
} 

Kod dla IPlugin i IPluginManager:

public interface IPluginManager 
{ 
    void Foo(); 
} 

public interface IPlugin 
{ 
    void Activate(IPluginManager manager); 
} 

Ten kod ładuje pobranego montaż zapisany w pliku na downloadedFilePath. Następnie znajduje klasy implementujące IPlugin i ładuje je.

Od tego momentu wszystko jest twoje. Możesz wydać oba interfejsy, aby dodać funkcjonalność wtyczek i aplikacji. Klasa implementująca IPluginManager obsługuje całą komunikację zi do wtyczek.


Jeśli nie podoba toczenia własne, można użyć MEF (the Managed Extensibility Framework).

+0

Dlaczego spadł? –

+0

Hmmm, nie wiem, głosowałem za twoją odpowiedzią;) –

Powiązane problemy