erroractivatingIInterceptor...onlyviaCOM?TL;DR:Kernel.Get在从.net/WPF应用程序调用时工作,但在从VB6应用程序调用时,会发生内部ActivationException(在TargetInvocationException内)。什么?这是对这个问题的跟进,我在其中配置了一个带有Ninject约定的抽象工厂,这样我就不需要实际实现一个,Ninject工厂扩展负责生成动态。这工作得很好......直到我需要从VB6代码运行我的库。_kernel.Bind(t=>t.FromAssemblyContaining(typeof(ViewModelBase)).SelectAllInterfaces().EndingWith("ViewFactory").BindToFactory());一旦我从VB6代码调用应用程序上的任何内容,如果我将依赖项的解析包装在try/catch块中,我将捕获带有内部ActivationException的TargetInvocationException:使用IInterceptor提供程序的条件隐式自我激活IInterceptor时出错绑定返回空。激活路径:3)在IViewFactoryProxy类型的构造函数的参数中注入依赖IInterceptor2)在MsgBox类型的构造函数的参数viewFactory中注入依赖IViewFactory1)请求IMsgBox建议:1)确保提供者正确处理创建请求。我没有引用Ninject.Interception扩展(此时)。奇怪的是,如果我没有启动VB6,而是在调试时启动沙盒WPF测试应用程序,我没有得到任何ActivationException,一切都很顺利。VB6代码死于自动化错误-2146232828(80131604),谷歌没有产生任何结果,但我猜它与抛出的TargetInvocationException有关。就.net代码而言,它可以正常工作:如果我从WPF客户端编写应用程序,我可以查看MsgBox类构造函数并看到IViewFactory参数与IViewFactory一致;如果我从VB6ActiveXDLL编写应用程序(我还创建了一个VB6EXE用于测试,它与DLL相同),它会崩溃。更新我删除了通用抽象工厂,我不再收到此错误。因为我不想写工厂,所以我求助于一些我可以接受的更紧密的耦合。现在我想知道为什么会这样!我今天在一个完全不同的环境中遇到了这个例外。我正在尝试在VSWPF设计器的设计时视图模型中使用配置有自定义模块的内核。该模块有许多使用ToFactory()扩展方法配置的接口。问题是由于某种原因,当我初始化内核时Ninject.Extensions.Factory.FuncModule没有自动加载,可能是由于VS设计器处理创建设计时类的方式中的一些恶作剧(可能是因为它没有加载正确的组装或其他东西,谁知道)。我有一个单元测试正在创建这些设计时视图模型之一,它运行良好,所以它绝对是与设计师相关的。我通过为我的设计时视图模型创建一个特殊的内核来解决这个问题。publicclassDT_Kernel:StandardKernel{publicDT_Kernel():base(newMyModule()){if(!HasModule(typeof(FuncModule).FullName)){Load(new[]{newFuncModule()});}}}this代码的重要部分是加载FuncModule(如果尚未加载)的位。您可以使用此代码来解决您的问题。以上就是C#学习教程:报错激活IInterceptor...只能通过COM?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
