私は現在VSTO for Excelを作成していますが、これは他のアプリケーションにも当てはまります。アプリはいくつかのサイト用ですので、私はコアロジックとサイト固有のロジックを書いています。私はサイト間の交換を容易にするために、すべてのサイト固有のロジックを1つのサブフォルダに保存しようとしています。C#インスタンス化をより抽象化する方法
VSTOには、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 [SOLID設計原理を?]/wiki/SOLID_(オブジェクト指向設計)) – Aron
@Aron「オブジェクト指向プログラミングの使用を検討しましたか?」 – user5226582
@Aron何を意味していますか?私の論理の大半は、固体に基づいています。まあ、それを守ることができます。 – ToshiBoy