我正在编写一个Visual Studio扩展程序,需要创建自己的
然而,我的导入始终为
IWpfTextViewHost
(代码编辑器窗口)。这可以通过 ITextEditorFactoryService
实现,但必须通过 MEF 框架加载。然而,我的导入始终为
null
,但我似乎无法弄清楚为什么我的导入为 null
。我对 MEF 的工作原理有一个大概的了解,是否有一种方法可以调用 Visual Studio 本身的 CompositionContainer
?还是 vsix 项目构建此容器?如果是这样,基于什么设置?public class MyViewHost {
[Import]
public ITextEditorFactoryService TextEditorFactory { get; set; }
public IWpfTextViewHost CreateViewHost(ITextBuffer textBuffer)
{
var textView = this.TextEditorFactory.CreateTextView(textBuffer);
return this.TextEditorFactory.CreateTextViewHost(textView, true);
}
}
编辑
这是extension.vsixmanifest
的相关部分。
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="Build%CurrentProject%" Path="|dllName;PkgdefProjectOutputGroup|" />
<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" Path="dllName" />
</Assets>
MyViewHost
的实例?这个类没有实现任何已知接口,也没有将其导出为MEF组件。看起来这不是通过MEF组件注册表检索的,因此导入方式将无法填充。 - nejcs