|
分類:[VB.NET/VB2005 以降]
毎々参考にさせて頂いております。
nopnopと申します。
少し困ったことになってしまったのでお力を拝借させて頂きたく。。
前提・環境等
やりたい事
・拡張Providerを使用してコントロールへプロパティを後付で追加
面倒な前提
a.Mainのプロジェクトと、参照しているHoge.dllが存在。
b.対象となるコントロールはMain側、Hoge.dllの両方に存在。
c.開発言語はVB.NET(2005)
お聞きしたい事
1.こういった対象が複数のプロジェクトへ渡る場合、
拡張Providerは、Main側とHoge.dll側のどちらに配置を考えられますか?
2.現在 今後もコントロールが増えることを踏まえ、
Hoge.dll側に配置しようと下記の方法で実装しておりますが、2.4で詰まってしまっています。
2.1 インターフェースを切り出すためのIHoge.dll を作成。Main、Hoge.dllはそれぞれIHoge.dllを参照
2.1 IHoge.dll へ、CanExtendで対象コントロールを切り分ける処理を行う為の
インターフェースIStyleCollectorとそのインスタンスを作成するIStyleFactoryを作成
2.2 IStyleCollectorFactory の実装クラスStyleCollectorFactoryをMainへ実装
2.3 Reflectionを使用してHoge.dll側からStyleCollectorFactoryをインスタンス化
2.4 ExStyleCollector を IExStyleCollectorへキャストして処理を実施
このキャスト部分で、Main.StyleCollectorFactory を IHoge.IExStyleCollector へキャスト出来ないというエラーが発生してしまいます。
要は参照しているDLL側からMain側のクラスをインスタンス化して使える様にしたいのですが、この考え方自体が不味いのでしょうか・・・?
問題のキャスト部分のソース(抜粋)
Public Function getFactoryInstance() As IHoge.IStyleCollectorFactory
Dim ass As Assembly = Nothing
Dim facType As Type = Nothing
ass = Assembly.LoadFrom("Main.exe") ' 実際はExeファイルのフルパス
facType = ass.GetType("Main.StyleCollectorFactory")
Return CType(
facType.InvokeMember(Nothing, System.Reflection.BindingFlags.CreateInstance, Nothing, Nothing, Nothing), _
IHoge.IStyleCollectorFactory) ' ここでエラー
End Function
以上、よろしくお願いいたします。
|