问题描述
我想使用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 (将#修改为@)