为了账号安全,请及时绑定邮箱和手机立即绑定

vsix 项目 (MEF) 中的 Visual Studio 组件导入为空

vsix 项目 (MEF) 中的 Visual Studio 组件导入为空

C#
慕田峪4524236 2021-12-05 16:53:58
我正在编写 Visual Studio 扩展,我需要创建自己的IWpfTextViewHost(代码编辑器窗口)。这可以通过 完成,ITextEditorFactoryService但这必须通过 MEF 框架加载。但是我的 import 总是null,但我似乎无法弄清楚为什么我的 import 是null。我对 MEF 的工作原理有一个粗略的想法,有没有一种方法可以调用CompositionContainerVisual Studio 本身?还是 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>
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我找到了基于@nejcs response 和 this gist的答案。我将发布解决方案:


[Export(typeof(IMyViewHost))]

public class MyViewHost : IMyViewHost

{

    [Import]

    public ITextEditorFactoryService TextEditorFactory { get; set; }


    public IWpfTextViewHost CreateViewHost(ITextBuffer textBuffer)

    {

        var textView = this.TextEditorFactory.CreateTextView(textBuffer);

        return this.TextEditorFactory.CreateTextViewHost(textView, true);

    }

IMyViewHost是与CreateViewHost方法的接口。在SatisfyImportsOnce必须在扩展命令类的构造函数被调用,IMyViewHost必须在此扩展命令类进口。


查看完整回答
反对 回复 2021-12-05
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信