マイナー プロジェクトでは、プラグインの作成に使用する基本的なインターフェイスを作成しました。このインターフェイスには、UserControl を返す関数があります。ただし、これが呼び出され、UserControl がパネルに追加されると、パネルには何も表示されません ( .Show()
orVisibility = true
が設定されていても)。assembly.CreateInstance()
が呼び出されると、クラス内の任意のオブジェクトのインスタンスが作成されると想定していました。
そうではありませんか?CreateInstance()
この方法で使用する前に、すべての UserControls でaを呼び出す必要がありますか?
public interface IMyInterface
{
System.Windows.Forms.UserControl GetConfigurationControl();
}
dll に実装されたクラス:
public class myClass: IMyInterface
{
return new myUserControl();
}
ディレクトリ内のすべてのdllをロードしました:
private void LoadPlugins()
{
foreach (string file in Directory.GetFiles(Application.StartupPath+"/plugins/", "*.dll", SearchOption.AllDirectories))
{
Assembly assembly = Assembly.LoadFile(file);
var types = from t in assembly.GetTypes()
where t.IsClass &&
(t.GetInterface(typeof(IMyInterface).Name) != null)
select t;
foreach (Type t in types)
{
IMyInterface plugin = (IMyInterface)assembly.CreateInstance(t.FullName, true);
this.pluginsList.Add(plugin); //just a list of the plugins
}
}
this.AddPluginUserControls();
}
ユーザー コントロールをパネルに追加します。
private AddPluginUserControls()
{
foreach (IMyInterface plugin in pluginsList)
{
myPanel.Controls.Add(plugin.GetConfigurationControl());
}
}
私は他の完全なプラグイン アーキテクチャを認識していますが、これは学習用アプリケーションです。ありがとう!
ユーザーコントロール:
public partial class myUserControl: UserControl
{
public myUserControl()
{
InitializeComponent(); // couple of labels, vs generated.
}
}