Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# vsix项目(MEF)中的Visual Studio组件导入为空_C#_Visual Studio_Mef_Visual Studio Extensions_Visual Studio Sdk - Fatal编程技术网

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

C# vsix项目(MEF)中的Visual Studio组件导入为空,c#,visual-studio,mef,visual-studio-extensions,visual-studio-sdk,C#,Visual Studio,Mef,Visual Studio Extensions,Visual Studio Sdk,我正在编写Visual Studio扩展,需要创建自己的IWpfTextViewHost(代码编辑器窗口)。这可以通过ITextEditorFactoryService完成,但必须通过MEF框架加载 但是我的导入总是null,但我似乎不明白为什么导入是null。我对MEF的工作原理有一个大致的了解,有没有一种方法可以调用VisualStudio本身的CompositionContainer?还是vsix项目构造了这个容器?如果是,基于什么设置 public class MyViewHost {

我正在编写Visual Studio扩展,需要创建自己的
IWpfTextViewHost
(代码编辑器窗口)。这可以通过
ITextEditorFactoryService
完成,但必须通过MEF框架加载

但是我的导入总是
null
,但我似乎不明白为什么导入是
null
。我对MEF的工作原理有一个大致的了解,有没有一种方法可以调用VisualStudio本身的
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);
   }

}
编辑 这是
扩展.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>

我根据@nejcs响应和此找到了答案。 我将发布解决方案:

[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

您的.vsixmanifest文件是什么样子的?您好,我已向其添加了extension.vsixmanifest的相关部分。它有一个资产作为MEFComponentThow您如何获取/创建
MyViewHost
的实例?此类不实现任何已知接口,并且您也不会将其作为MEF组件导出。似乎这不是通过MEF组件注册表检索的,因此无法填充导入。