Hallo Community,
ich hab ein etwas komplexeres Problem.
Ich bin im Moment dabei, Anwendungen zu entwickeln, die unabhängige Module zur Laufzeit laden können.
Ich benutze dazu zwei Interfaces:
[highlight=c#]
public interface IModule
{
GUID Guid { get; }
String Name { get; }
String Description { get; }
String Author { get; }
Version Version { get; }
UserControl MainFrame { get; }
List<GUID> RequiredModules { get; }
IModuleHost HostApplication { get; set; }
}
public interface IModuleHost
{
Dictionary<GUID, IModule> Modules { get; }
}
[/highlight]
Sinn ist, dass ich eine Anwendung als IModuleHost deklariere, auf der anderen Seite beliebige Bibliotheken als IModule.
Via
[highlight=c#]
private Dictionary<GUID, IModule> dictModules;
...
String[] moduleFiles = Directory.GetFiles("Modules", "*.dll");
foreach (String file in moduleFiles)
{
Assembly ass = Assembly.LoadFrom(file);
foreach (Type T in ass.GetTypes())
{
if (T.GetInterface("ModuleInterface.IModule") != null)
{
IModule oMod = (IModule)Activator.CreateInstance(T, this);
dictModules.Add(oMod.Guid, oMod);
}
}
}
[/highlight]
werden dann die Module geladen. Funktioniert soweit prima.
Das Problem ist, dass zu diesem Zeitpunkt alle Module voneinander unabhängig sind.
Jetzt würde ich aber gern erreichen, dass ich von einem Modul auf die Daten eines anderen zugreifen kann. Also brauche ich sowas wie eine Datenbasis, über die alle Module miteinander kommunizieren können.
Hat jemand eine Idee, wie man sowas am besten realisieren könnte?
Meine erste Idee war, dass der ModuleHost eine Datenbank mitbringt, in der sich dann jedes Modul eigene Tabellen erstellt, auf die andere Module dann natürlich auch zugreifen könnten. Aber irgendwie gefällt mir die Idee nicht...
Das mutet so improvisiert an...
Danke für konstruktive Beiträge!
ArkonRogg
ich hab ein etwas komplexeres Problem.
Ich bin im Moment dabei, Anwendungen zu entwickeln, die unabhängige Module zur Laufzeit laden können.
Ich benutze dazu zwei Interfaces:
[highlight=c#]
public interface IModule
{
GUID Guid { get; }
String Name { get; }
String Description { get; }
String Author { get; }
Version Version { get; }
UserControl MainFrame { get; }
List<GUID> RequiredModules { get; }
IModuleHost HostApplication { get; set; }
}
public interface IModuleHost
{
Dictionary<GUID, IModule> Modules { get; }
}
[/highlight]
Sinn ist, dass ich eine Anwendung als IModuleHost deklariere, auf der anderen Seite beliebige Bibliotheken als IModule.
Via
[highlight=c#]
private Dictionary<GUID, IModule> dictModules;
...
String[] moduleFiles = Directory.GetFiles("Modules", "*.dll");
foreach (String file in moduleFiles)
{
Assembly ass = Assembly.LoadFrom(file);
foreach (Type T in ass.GetTypes())
{
if (T.GetInterface("ModuleInterface.IModule") != null)
{
IModule oMod = (IModule)Activator.CreateInstance(T, this);
dictModules.Add(oMod.Guid, oMod);
}
}
}
[/highlight]
werden dann die Module geladen. Funktioniert soweit prima.
Das Problem ist, dass zu diesem Zeitpunkt alle Module voneinander unabhängig sind.
Jetzt würde ich aber gern erreichen, dass ich von einem Modul auf die Daten eines anderen zugreifen kann. Also brauche ich sowas wie eine Datenbasis, über die alle Module miteinander kommunizieren können.
Hat jemand eine Idee, wie man sowas am besten realisieren könnte?
Meine erste Idee war, dass der ModuleHost eine Datenbank mitbringt, in der sich dann jedes Modul eigene Tabellen erstellt, auf die andere Module dann natürlich auch zugreifen könnten. Aber irgendwie gefällt mir die Idee nicht...
Das mutet so improvisiert an...
Danke für konstruktive Beiträge!
ArkonRogg
Comment