TL;DR: .net/WPF アプリから呼び出された場合は機能しますが、VB6 アプリから呼び出された場合は内部( a内)Kernel.Get<T>
で爆発します。え?ActivationException
TargetInvocationException
これは、実際に実装する必要がないように、Ninject 規則を使用して抽象ファクトリを構成したこの質問のちょっとしたフォローアップです。
これは見事に機能しました... VB6 コードからライブラリを実行する必要が生じるまで。
_kernel.Bind(t => t.FromAssemblyContaining(typeof(ViewModelBase))
.SelectAllInterfaces()
.EndingWith("ViewFactory")
.BindToFactory());
VB6 コードからアプリで何かを呼び出すとすぐに、依存関係の解決を try/catch ブロック内にラップするTargetInvocationException
と、内部でa をトラップしActivationException
ます:
IInterceptor プロバイダーの条件付きの暗黙的な自己バインディングを使用して IInterceptor をアクティブ化する際にエラーが発生し、null が返されました。アクティベーション パス:
3) IViewFactoryProxy 型のコンストラクターのパラメーターへの依存関係 IInterceptor の注入
2) MsgBox 型のコンストラクターのパラメーター viewFactory への依存関係 IViewFactory の注入
1) IMsgBoxのリクエスト
提案:
1) プロバイダーが作成要求を適切に処理することを確認します。
Ninject.Interception 拡張機能への参照はありません (現時点では)。
奇妙なことに、VB6 を起動する代わりに、デバッグ時にサンドボックス WPF テスト アプリを起動すると、何も得られずActivationException
、すべてが魅力的に機能します。
VB6 コードはautomation error -2146232828 (80131604)
終了し、Google では何も得られませんが、TargetInvocationException
スローされたことに関係していると思います。
.net コードに関する限り、それは機能します。WPF クライアントからアプリを作成すると、MsgBox
クラス コンストラクターを中断して、パラメーターが;IViewFactory
に満足していることを確認できます。Castle.Proxy.IViewFactoryProxy
VB6 ActiveX DLL からアプリを作成すると (テスト用に VB6 EXE も作成し、DLL と同じです)、アプリが爆発します。
アップデート
一般的な抽象ファクトリを削除したところ、このエラーは発生しなくなりました。そして、私は工場を書きたくないので、私が耐えられるように、もう少し密結合を選びました。どうしてこうなったのか今すぐ知りたい!