You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio Community Toolkit扩展ToolWindow依赖注入失效求助

问题:Visual Studio Community Toolkit扩展项目集成Autofac依赖注入失败

一、常规VSIX项目的成功实践

我创建了常规VSIX项目(非Community Toolkit项目):
基础VS扩展包

添加简单ToolWindow:
添加简单ToolWindow

之后配置Autofac依赖注入基础设施,一切均可正常运行。该实现思路来自Akos Nagy的文章。

此场景下的ToolWindow继承自ToolWindowPane,通过构造函数依赖注入UserControl,代码如下:

public class TrialToolWindow : ToolWindowPane
{
    /// <summary>
    /// Initializes a new instance of the <see cref="TrialToolWindow"/> class.
    /// </summary>
    public TrialToolWindow(TrialToolWindowControl trialToolWindowControl) : base(null)
    {
        this.Caption = "TrialToolWindow";

        // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
        // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on
        // the object returned by the Content property.
        this.Content = trialToolWindowControl;
    }
}

二、Community Toolkit项目遇到的问题

我创建了带ToolWindow的Community Toolkit项目:
带ToolWindow的Community Toolkit项目

此场景下的ToolWindow继承自Community.VisualStudio.Toolkit.BaseToolWindow,代码如下:

public class MyToolWindow : BaseToolWindow<MyToolWindow>
{

}

该ToolWindow同样依赖UserControl,硬编码依赖(不使用DI)时可正常显示;但添加Autofac依赖注入后,ToolWindow无法显示。

深入查看BaseToolWindow源码后,发现问题出在直接实例化对象的代码:

_package = package;
_implementation = new T() { Package = package };

这种直接new对象的方式违反依赖注入原则,我认为这是问题根源,但不确定是Community Toolkit开发团队的设计问题,还是我遗漏了正确的DI实现方式?是否有其他更优的DI实现方案?


内容的提问来源于stack exchange,提问作者VivekDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:24:51