2009-05-25 12 views
0

私はプログラムを作成しており、プログラムでプラグインをサポートしたいと考えています。プログラムが実装しなければならないインターフェイスを作成しました。私はプラグインを呼び出すために私のメインプログラムから、次のコードを使用しています:.NETアセンブリを動的にロードする

Dim asm As Assembly = Assembly.LoadFrom(ff.FullName) 
' Get the type 
Dim myType As System.Type = asm.GetType(asm.GetName.Name + "." + asm.GetName.Name) 
' If the type is null then we try again without the root namespace name 
If myType Is Nothing Then myType = asm.GetType(asm.GetName.Name) 
' Check to see if the plugin implements the required Interface 
Dim IsMyPlugin As Boolean = GetType(LGInterfaces.ILGSQLPlugin).IsAssignableFrom(myType) 
Dim ActivePlugin As New PluginObject() 
If IsMyPlugin Then 
    ActivePlugin.Plugin = CType(Activator.CreateInstance(myType), LGInterfaces.ILGPlugin) 

すべてのものが動作し、私は理解できない一つの問題を除いて、私の公開されたプロパティにアクセスすることができています。

Private m_PanelObject As Windows.Forms.Control 

Public Property PanelObject() As Windows.Forms.Control 
Get 
    Return m_PanelObject 
End Get 
Set(ByVal value As Windows.Forms.Control) 
    m_PanelObject = value 
End Set 

[OK]をので、私は私のメインプログラムからこのプロパティを設定し、すべての作品:私のプラグインでは、私は、プロパティを公開するために、次のコードを使用します。例外を除いて、m_PanelObjectは何らかの理由でNothingに設定されます。私はプログラムのどこにも何も設定しておらず、プラグインのコードにNothingを設定する場所がありません。では、私はここで何が欠けていますか?私はこれがかなり明白であると確信しています。事前に感謝します

+0

メインプログラムからサンプルを提供できますか?特に、例外がスローされる行はどこですか? – Galilyou

+0

メインプログラムから次の行が呼び出されています。 Plugin.Plugin.DataWriteHeader(FileWriter、 "TestTable") これはプラグインのサブです。プラグイン自体は、例外がスローされる場所です。 –

答えて

3

最初に、MEFを見てください。なぜなら、明らかな理由がないのにホイールを再発明しているからです。

元の質問については、プラグインインスタンスが破棄されないようにしてください。またはPanelObjectNothingなどが割り当てられているかどうかを確認してください。.NETガベージコレクタはこの問題とは関係ありません。

+0

MEFを使用していない理由は、理解しているように、.NET 3.5または.NET 4.0を対象としているからです。私のアプリケーションは.NET 2.0をターゲットにしています –

+0

いいえ、MEFは.NET 2.0でも使用できます。 –

+0

私はそれをチェックアウトします。入力いただきありがとうございます。 –

関連する問題