我目前正在为Excel编写VSTO,但这也适用于其他应用程序。该应用程序适用于多个站点,因此我正在编写核心逻辑和特定于站点的逻辑。我试图将所有特定于站点的逻辑保留在单个子文件夹中,以便在站点之间进行交换。c#如何使实例化更抽象?
VSTOs有一个叫ThisAddIn.cs
类。它实例化一个名为AddInUtilities
的类。我看起来像这样:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IAddInUtilities
{
public void ImportData()
{
var activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
if (activeWorksheet == null) return;
var loadCsv = new CsvImporter();
if (loadCsv.IsNotCancelled) loadCsv.AndImportIndexDataInto(activeWorksheet);
}
}
我的CsvImporter
类是特定于站点的。它基于一个抽象类,而这个抽象类又基于一个接口,这个接口允许我将导入器中的核心逻辑的所有内容都从站点特定的子文件夹移开。
我可以不在身边让我的头是如何让我的课
var loadCsv = new CsvImporter();
抽象的实例?我显然不能实例化接口或抽象类。我可以将这个类移动到特定于站点的代码中,但是我的ThisAddIn.cs
指的是这个类将需要引用站点特定的代码(或者至少使用该子文件夹的名称空间)。
周围唯一的方法,我能想到的,将是物理移动文件到子文件夹,但离开命名空间是。有没有更好的办法?我觉得我错过了一些东西。
你有没有考虑使用(https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)) – Aron
@Aron,就像是在说“你有没有考虑过使用面向对象的编程” – user5226582
@Aron你是什么意思?我的大部分逻辑都是基于SOLID的......呃,尽可能的坚持下去。 – ToshiBoy