Kernel.Get<T> 在.net/WPF应用程序调用时工作,但与内部的(从VB6应用程序调用 TargetInvocationException**)时)一起爆炸。什么?**
这是对this question的一种跟踪,我在那里配置了一个抽象工厂,它使用Ninject约定,这样的话,我就不需要实际实现一个了,Ninject工厂扩展负责在运行中生成一个工厂。
效果很好..。直到我需要从VB6代码运行我的库。
_kernel.Bind(t => t.FromAssemblyContaining(typeof(ViewModelBase))
.SelectAllInterfaces()
.EndingWith("ViewFactory")
.BindToFactory());一旦我从VB6代码中调用应用程序上的任何内容,如果我将依赖关系的解析包装在try/ ActivationException块中,我就会用内部ActivationException捕获一个ActivationException。
使用IInterceptor提供程序的条件隐式自绑定激活IInterceptor错误返回null。激活路径: 3)将依赖IInterceptor注入到IViewFactoryProxy类型构造函数的参数中。 2)将依赖IViewFactory注入到MsgBox类型构造函数的参数viewFactory中 1) IMsgBox请求 建议: 1)确保提供程序正确处理创建请求。
我没有提到Ninject.Interception扩展(此时)。
奇怪的是,如果我在调试时没有启动VB6,而是启动了一个沙箱WPF测试应用程序,那么我没有得到任何ActivationException,而且一切都很有魅力。
VB6代码与automation error -2146232828 (80131604)一起死掉,而automation error -2146232828 (80131604)在谷歌上没有任何结果,但我猜它与抛出的TargetInvocationException有关。
就.net代码而言,它只是起作用:如果我从WPF客户端编写应用程序,我可以在MsgBox类构造函数中插入,并看到IViewFactory参数对Castle.Proxy.IViewFactoryProxy很满意;如果我从VB6 ActiveX DLL (我还创建了一个VB6 EXE来测试并与DLL相同)编写应用程序,它就会崩溃。
更新
我删除了通用抽象工厂,不再得到这个错误。因为我不想写工厂,所以我选择了一些我可以忍受的更紧密的耦合。现在我想知道为什么会发生这种事!
发布于 2014-03-04 11:52:25
今天我遇到了一个与你们完全不同的异常。我试图在VS WPF设计器的设计时视图模型中使用一个配置了自定义模块的内核。该模块具有许多使用ToFactory()扩展方法配置的接口。
问题是,由于某些原因,当我初始化内核时,Ninject.Extensions.Factory.FuncModule没有自动加载,这可能是因为VS设计器处理创建设计时类的方式有些诡计(可能它没有加载适当的程序集或其他什么东西,谁知道)。
我有一个单元测试,它创建了这些设计时视图模型之一,它工作得非常完美,所以它肯定是与设计人员相关的东西。
我通过为我的设计时视图模型创建一个特殊内核来解决这个问题。
public class DT_Kernel : StandardKernel
{
public DT_Kernel()
: base(new MyModule())
{
if (!HasModule(typeof(FuncModule).FullName))
{
Load(new[] { new FuncModule() });
}
}
}这段代码的重要部分是如果还没有加载FuncModule的话加载它的位。
您可以利用这些代码来解决问题。
https://stackoverflow.com/questions/18395022
复制相似问题