Dynamiczne ładowanie klas z DLL

0

Witam.

Próbuje stworzyć taką aplikacje która ma pewne obiekty. Stworzyłem w tym celu klasę bazową, BaseClass a w niej wszystkie potrzebne metody itp. W zasadzie to ona nie jest potrzebna ale jak coś to mogę dać kod.

Pytanie brzmi jak teraz załadować inne klasy które będą oparte na tej klasie z osobnych dllek?

W głównym programie mam liste obiektów
public List<object> Objects = new List<object>();
i metody które się wykonują. Każda klasa posiada jakieś tam wartości oraz kilka stałych metod:

public void SeparateThread()
public void TimerTick()

Jak nie trudno się domyśleć w głównym programie jest timer który wywołuje cyklicznie metodę TimerTick z każdego obiektu w Objects. SeparateThread jest odpalany jako osobny wątek, wszystko po to żeby można było sobie za pomocą bardziej rozbudowanych obiektów zrobić klasę która zmienia swoje parametry w czasie, albo wykonuje całkowicie odrębne obliczenia.

I Teraz jak załadować taką klasę z odpowiedniej dllki i dorzucić do puli Objects?

0

Poczytaj o refleksji. W ogolnosci wyglada to tak:

Assembly loadedAssembly = Assembly.LoadFrom(plik);
Type[] loadedTypes = loadedAssembly.GetTypes();
foreach(Type type in loadedTypes)
{
  if(type.IsAssignableFrom(typeof(MyBaseClass)))
    Objects.Add(type.CreateInstance(...);
}

Pisane z palca, wiec nazwy metod moga sie nieco roznic (nie ta pamiec co kiedys ;) ) ale taki schemat powinien dzialac - czyli dodawac do listy po jednej instancji obiektu z kazdego typu w assembly, ktory dziedziczy z MyBaseClass.

0

Dzieki, poradziłem sobie dzieki temu, zobaczymy jak to będzie działać.

Tylko to jest troche inaczej:

Nie:
Objects.Add(type.CreateInstance(...);
Tylko tak:
Objects.Add(Activator.CreateInstance(type));

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