如何使用COM InteropExcel解决依赖项注入

问题描述

我想使用COM互操作(Excel)对象添加依赖项注入。我想知道它是否不会由于主程序和类库中的using Excel = Microsoft.Office.Interop.Excel;声明而失败。我对依赖注入也有些担心,因为我还必须在主程序中引用Excel。

主程序(过于简化)

class Program
{
    private static ServiceProvider _serviceProvider;

    static void Main(string[] args)
    {
        // Setups dependency injection
        var service = new ServiceCollection()
            .AddSingleton<ExcelConnector>()
            .AddSingleton<Excel.Application>(provider =>
                new Excel.Application
                {
                    displayAlerts = false,Visible = false
                }
            )
            .AddSingleton<Program>();
        
        _serviceProvider = service.BuildServiceProvider();
        
        using var excel = _serviceProvider.GetService<ExcelConnector>();
    }
}

类库

public class ExcelConnector : Idisposable
{
    private readonly Excel.Application _xlApp;
    
    public ExcelConnector(Excel.Application xlApp)
    {
        _xlApp = xlApp
    }
    
    #region Idisposable Implementation
    
    public void dispose()
    {
        // Cleans up
        GC.Collect();
        GC.WaitForPendingFinalizers();
        
        if (_xlApp != null)
        {
            _xlApp.Quit();
            _ = Marshal.ReleaseComObject(_xlApp);
        }
    }
    
    #endregion
}

我收到以下错误 system.invalidOperationException:“在尝试激活“ MacrosLibrary.ExcelConnector”时,无法解析类型为“ Microsoft.Office.Interop.Excel.Application”的服务。”

我错过了什么吗?界面是否可以解决这个问题?

感谢您的见解。

更新和精度

这是一个C#8.0更新(using var)的.NET Framework 4.8项目。

这是一个运行良好的新程序,它删除Excel.Application xlApp构造函数参数,并新增了_xlApp

我认为库的版本没有不同(我一直读到,不可能在同一台计算机上安装2个不同的Office版本。)它是Excel 16.0 64位。该库位于此处: C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.Office.Interop.Excel \ 15.0.0.0__71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

我已经不得不在Embed Interop Types中进行一些更改,但是我相信这是在C ++项目中。设置为true,将其更改为false可解决此问题...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)