2009-03-03 16 views
1

Als Plugin-Framework-Entwickler möchte ich eine Schnittstelle angeben, myNameSpace.IPlugin, die die Plugins implementieren müssen. Der Rückgabewert eines der Schnittstellenelemente, IPlugin.GetWidget(), muss von einem Typ sein, der von System.Windows.Forms.Control abgeleitet ist, und außerdem muss die Schnittstelle myNameSpace.IFoo implementiert sein. Ich möchte auch zulassen, dass die Plugin-Entwickler Steuerelemente von Drittanbietern (die bereits System.Windows.Forms.Control-Nachkommen sind) von IPlugin.GetWidget() zurückgeben. Was ist der beste Weg, diese Anforderung eindeutig zu spezifizieren, außer sie natürlich zu dokumentieren :) und durchzusetzen? Wie würde ein Plugin-Entwickler ein Plugin entwerfen (mit einem Drittanbieter-Steuerelement), um diese Anforderungen zu erfüllen?GUI Framework Plugin Design

+1

Ich liebe, wie die Tags sind die Frage Titel ... –

Antwort

1

Ihr Design riecht etwas fischig. Warum müssen Widgets beide von einer konkreten Klasse erben und eine andere nicht verwandte Schnittstelle implementieren? Klingt, als wärst du ein wenig erblich. Statt dessen versuchen Sie dies:

interface IPlugin 
{ 
    IWidget Widget { get; } 
} 

interface IWidget 
{ 
    System.Windows.Forms.Control Control { get; } 
    IFoo Foo { get; } 
} 

Ob IFoo wird durch die Steuerung implementiert selbst oder einer anderen Klasse sollte wirklich bis zum Implementierer. Dein Code sollte es nicht kümmern.