Поэтому я рад использовать трехуровневую архитектуру для своих API, но у меня есть проблема с ее реализацией в моей надстройке VSTO (но, может быть, мне не следует?). В любом случае, вот мое нерабочее решение;
В моем VSTO есть кнопка для получения всех объектов.
private void Bt1_Click(object sender, Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs e)
{
ObjectManager objManager = new ObjectManager(new ExcelObjectDal());
var allObjects = objManager.GetObjects();
//Add all objects to WinForm
}
и мой ObjectManager, расположенный на моем бизнес-уровне:
public class ObjectManager : IObjectService
{
public IObjectDal ObjectDal { get; set; }
public ObjectManager(IObjectDal DAL)
{
ObjectDal = DAL;
}
public List<Object> GetObjects()
{
Worksheet sheet = ObjectDal.GetObjects();
//Business logic to extract each object from the sheet
return new List<object>();
}
}
а вот мой ДАЛ:
public class ExcelObjectDal : IObjectDal
{
private Workbook book;
public ExcelObjectDal()
{
this.book = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook);
}
public Worksheet GetObjects()
{
Worksheet sheet = (Worksheet)Globals.Factory.GetVstoObject(book.Worksheets[name]);
return sheet;
}
}
Моя проблема в том, что моя книга недоступна нигде, кроме моего VSTO. Так должен ли я просто создать его в одном большом проекте и забыть о многоуровневости или как получить доступ к своим данным (таблицам Excel) из любого места, кроме VSTO?