C# 激活IInterceptor时出错。。。只有通过COM?

C# 激活IInterceptor时出错。。。只有通过COM?,c#,vb6,ninject,com-interop,C#,Vb6,Ninject,Com Interop,TL;DR:Kernel.Get在从.net/WPF应用程序调用时工作,但在从VB6应用程序调用时会出现内部ActivationException(在targetingException内部)。什么? 这是我用Ninject约定配置了一个抽象工厂的一点后续工作,这样我就不需要实际实现一个抽象工厂,Ninject工厂扩展负责动态生成一个抽象工厂 这工作做得很好。。。直到我需要从VB6代码运行我的库 _kernel.Bind(t => t.FromAssemblyContaining(type

TL;DR:
Kernel.Get
在从.net/WPF应用程序调用时工作,但在从VB6应用程序调用时会出现内部
ActivationException
(在
targetingException
内部)。什么?

这是我用Ninject约定配置了一个抽象工厂的一点后续工作,这样我就不需要实际实现一个抽象工厂,Ninject工厂扩展负责动态生成一个抽象工厂

这工作做得很好。。。直到我需要从VB6代码运行我的库

_kernel.Bind(t => t.FromAssemblyContaining(typeof(ViewModelBase))
       .SelectAllInterfaces()
       .EndingWith("ViewFactory")
       .BindToFactory());
一旦我从VB6代码调用应用程序上的任何内容,如果我将依赖项的解析包装在一个try/catch块中,我就用一个内部的
ActivationException
捕获了一个
targetingException

使用条件隐式自绑定激活IInterceptor时出错 IInterceptor提供程序的返回值为null。激活路径:

3) 将依赖项IIInterceptor注入IViewFactoryProxy类型构造函数的参数

2) 将依赖项IViewFactory注入MsgBox类型构造函数的参数viewFactory

1) IMsgBox请求

建议:

1) 确保提供程序正确处理创建请求

我没有提到Ninject.Interception扩展(此时)

奇怪的是,如果我在调试时没有启动VB6而是启动了一个沙盒WPF测试应用程序,我没有得到任何
ActivationException
,一切都像一个魔咒一样工作

VB6代码死于
自动化错误-2146232828(8013604)
,这在Google上不会产生任何结果,但我猜这与抛出的
targetingException
有关

就.net代码而言,它可以正常工作:如果我从WPF客户端编写应用程序,我可以打开
MsgBox
类构造函数,查看
IViewFactory
参数对
Castle.Proxy.IViewFactoryProxy
很满意;如果我使用VB6 ActiveX DLL编写应用程序(我还创建了一个VB6 EXE进行测试,与DLL相同),它会崩溃

更新
我删除了一般的抽象工厂,不再出现这个错误。因为我不想写工厂,所以我选择了一种我可以接受的更紧密的耦合。现在我想知道为什么会这样

我今天遇到了这个例外,与您完全不同。我试图在VSWPF设计器的设计时视图模型中使用配置了自定义模块的内核。该模块使用
ToFactory()
扩展方法配置了许多接口

问题是由于某种原因,
Ninject.Extensions.Factory.FuncModule
在我初始化内核时没有自动加载,这可能是由于VS designer处理创建设计时类的方式存在一些欺骗(可能它没有加载适当的程序集或其他东西,谁知道呢)

我做了一个单元测试,创建了其中一个设计时视图模型,它工作得很好,所以它肯定与设计师有关

我修复了这个问题,为我的设计时视图模型创建了一个特殊的内核

public class DT_Kernel : StandardKernel
{
    public DT_Kernel()
        : base(new MyModule())
    {
        if (!HasModule(typeof(FuncModule).FullName)) 
        {
            Load(new[] { new FuncModule() });
        }
    }
}
此代码的重要部分是加载FuncModule(如果尚未加载)的位


您可能能够利用该代码来解决问题。

我怀疑,如果试图在WPF设计器中使用配置了Ninject Factory扩展的模块,可能会遇到同样的问题。不过,我并没有使用约定,只是一个手动配置的.ToFactory()。你有没有搞清楚这一点?也许这与“应用程序”(vb6,VS designer)如何加载程序集有关。默认情况下,ninject将加载条目(?)程序集所在路径中所有“ninject.extensions.*.dll”的模块。可能使用vb6和VS designer时,条目程序集位置不可用/不正确。如果有机会,我将查看是否可以在初始化设计时视图模型的代码中添加一些日志,并写入已知的日志文件。我可以检查入口/执行程序集及其位置,并查看Ninject库是否在那里。哇,我刚刚遇到了完全相同的问题,正在为VBE开发COM加载项。用一个新的
FuncModule
实例加载我的
StandardKernel
解决了这个问题:
private readonly IKernel\u kernel=new StandardKernel(new FuncModule())-无需创建自定义内核类型,只需将
Ninject.Extensions.Factory.FuncModule
加载到内核中即可(这基本上就是您在这里所做的)。用谷歌搜索一个问题,并在你提出的问题上找到你的解决方案,这很有趣。。。两年前!