Visual Studio Community Toolkit扩展ToolWindow依赖注入失效求助
问题:Visual Studio Community Toolkit扩展项目集成Autofac依赖注入失败
一、常规VSIX项目的成功实践
我创建了常规VSIX项目(非Community Toolkit项目):
添加简单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.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
相关产品推荐
相关产品推荐

