Попытка создать фабрику для возврата универсального интерфейса (после этого ответа ), но с ошибкой:
Невозможно неявно преобразовать IFinancialsSyncService<Vendor, QuickBooksVendor>
в IFinancialsSyncService<TEntity, TQuickBooksEntity>
,Существует неявное преобразование, вам не хватает приведения?
public class QuickBooksEntityServiceFactory
{
public IFinancialsSyncService<TEntity, TQuickBooksEntity> Create<TEntity, TQuickBooksEntity>()
where TEntity : class, IEntity, IFinancials, new()
where TQuickBooksEntity : class, IQuickBooksEntity
{
if (typeof(TEntity) == typeof(QuickBooksVendor))
{
return new QuickbooksVendorService();
}
throw new InvalidOperationException();
}
}
Служба подтверждает интерфейс IFinancialsSyncService
:
public class QuickbooksVendorService : IFinancialsSyncService<Vendor, QuickBooksVendor>
Однако, если я приведу его явно, яполучите ошибку Cast is redundant
вместе с первой ошибкой.
return (IFinancialsSyncService<Vendor, QuickBooksVendor>)new QuickbooksVendorService();
Так что ошибка меня смущает.Что я делаю не так?
ОБНОВЛЕНИЕ
Это то, что я пытаюсь упростить.Есть несколько подобных случаев, которые также вызывают другие распространенные методы интерфейса.
switch (enumDataElement)
{
//Export jobs
case DataElement.Item:
var itemService = new QuickbooksItemService();
exportResult = itemService.UpdateMozzoEntityWithFinancialsId(session, response, EntityId, intUserId);
break;
case DataElement.Vendor:
var VendorService = new QuickbooksVendorService();
exportResult = UpdateMozzoEntityWithFinancialsId(new QuickbooksVendorService(),session, response, EntityId, intUserId);
break;
case DataElement.Bill:
var billService = new QuickbooksBillService();
exportResult = billService.UpdateMozzoEntityWithFinancialsId(session, response, intUserId);
break;
case DataElement.PurchaseOrder:
var qbPOService = new QuickbooksPurchaseOrderService();
exportResult = qbPOService.UpdateMozzoEntityWithFinancialsId(session, response, intUserId);
break;
case DataElement.SalesReceipt:
var salesReceiptService = new QuickbooksSalesReceiptService();
exportResult = salesReceiptService.UpdateStratusEntityWithFinancialsId(session, response, intUserId);
break;
}
И заменяют его чем-то вроде:
var qbEntityService = EntityServiceFactory.Create(enumDataElement);
Как будет выглядеть эта фабрика?