私は、4つの異なるメインフレームへの接続を管理するクラスbMainframeを持っています。これにより、特定の方法で開くことができる同じアンマネージライブラリと、一度に複数のメインフレームを接続することができます。各ライブラリには、アンマネージメインフレーム接続リソース用の独自の廃棄コードがあります。ラッパーには、個々のメインフレーム接続の廃棄コードを呼び出すコードもあります。これらの管理されていないリソースは、それぞれを参照することなく処分できますか?
誰かのプロジェクトが4つのメインフレームをすべて使用せず、ラッパーで処分を呼び出すと、エラーが発生します。 (FileLoadExceptionは、4つのマネージドメインフレームのアセンブリXをロードできませんでした)その廃棄コードは、4つのうちのどれがヌル/ヌルでないかをチェックします。何も/ nullが原因でも、アセンブリとクラッシュを読み込もうとします。
外部ラッパーの廃棄コードは有用か必要ですか?タイプのアセンブリがロードされていて、トリガーがタイプ/アセンブリをロードしていないかどうかをチェックする方法はありますか?
fileloadexceptionをブロックするために以下のコードを変更しましたが、これが最善の方法であるとは思われません。
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: free managed resources when explicitly called
End If
Try
If Me._Linx IsNot Nothing Then
If _Linx.cnLinx IsNot Nothing Then
Try
_Linx.Disconnect()
Catch ex As Exception
Trace.WriteLine("Error doing linx.disconnectSession")
End Try
Try
_Linx.Dispose()
Catch ex As Exception
Trace.WriteLine("Error doing linx.dispose")
End Try
End If
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LinxFile")
End Try
Try
If Me._Acaps IsNot Nothing Then
_Acaps.Disconnect()
_Acaps.Dispose()
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load AcapsFile")
End Try
Try
If Me._Dart IsNot Nothing Then
Try
_Dart.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Dart")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load DartFile")
End Try
Try
If LpsOpen Then
Try
_Lps.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Lps")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LpsFile")
End Try
' TODO: free shared unmanaged resources
End If
Me.disposedValue = True
End Sub