|
■No37754 (Jitta on the way さん) に返信
> ■No37735 (επιστημη さん) に返信
>>循環参照を解決するのが先でわないかと...
>>
>
> 賛成。
> 循環するのが単に参照しているという状態だけならいいのですが、生成するインスタンスが循環していそうな予感。
>
>
>>結局どれも相手クラスの参照設定がないと機能しないんです。
>
> そんなこと有りません。デバッガーは、どうして参照していないアプリケーションの様々な情報を得ているのでしょうか。
>
> 今晩辺り、リフレクションを使ったコードをブログにエントリーする予定なのですが、かなり面倒ですよ。
>
>
> プロジェクトを分けたいというのは、どういう理由でしょう?それによっては、プロジェクトを1つにする方がよいかも知れません。
このシステムは
Project1 ┬ Form1
└ (参照設定:Business)
Project2 ┬ Form2
└ (参照設定:Business)
Business ─ Bus1
という構成をしていて、
○パターン1
Public Class Bus1
Public Shared Sub openFrm(ByVal clsName As String, dllPath As String)
Dim asm As Assembly = Assembly.LoadFrom(dllPath) '(*)
Dim frmType As Type = asm.GetType(clsName)
Dim frm As Form = CType(Activator.CreateInstance(frmType), GetType(frmType))
frm.Show()
End Sub
End Class
Public Class Form1
Private Sub frm2open()
Call Bus1.openFrm("Project2.Form2", "Project2.dll")
End Sub
End Class
○パターン2
Public Class Bus1
Public Shared Sub openFrm(ByVal clsName As String)
Dim frmType As Type
For Each asm As Assembly In AppDomain.CurrentDomain.GetAssemblies
frmType = asm.GetType(clsName, False)
If Not myType Is Nothing Then Exit For
Next
Dim frm As Form = CType(Activator.CreateInstance(frmType), GetType(frmType)) '(*)
frm.Show()
End Sub
End Class
Public Class Form1
Private Sub frm2open()
Call Bus1.openFrm("Project2.Form2")
End Sub
End Class
といったパターンで試行錯誤していました。しかしいずれも、Project1にProject2への参照がないと、(*)のところで「ファイルまた
は依存関係が見つかりません」「(frmTypeに)Nullは設定できません」などとして落ちてしまうのです。参照を追加すると、うまく通
ります。
プロジェクトを分けるのは、管理面からだと思います。100を軽く超える画面数があり、システムの規約で1画面1プロジェクトと定め
られているため、そこに関しては私にはどうすることもできません。
|