IPayIssueService' 不包含 'IssueVoucher' 的定义
IPayIssueService' does not contain a definition for 'IssueVoucher'
在我正在处理的项目中,Interface
和 Class
之间有如下结构:
Business.Treasury
的 ClassLibrary
包含:
// namespace Business.Treasury.FiscalTransaction.Services
internal class PayIssueService
: FiscalTransactionIssueService<PayModel, PY_Pay_c, v_PY_Pay_c,
PaySubModel, TransactionDistributionModel>
, IPayIssueService
{
}
// namespace Business.Treasury.FiscalTransaction.Services
internal class FiscalTransactionIssueService<TMasterModel,
TMasterEntity, TMasterVwEntity, TMajorDetailModel,
TMinorDetailModel>
: IssueVoucherService, IFiscalTransactionIssueService<TMasterModel>
{
}
Business.Treasury.Public
的 ClassLibrary
包含:
// ns: Business.Treasury.Public.FiscalTransaction.Interfaces.Services
public interface IFiscalTransactionIssueService<TMasterModel>
: IIssueVoucherService
{
}
// ns: Business.Treasury.Public.FiscalTransaction.Interfaces.Services
public interface IPayIssueService
: IFiscalTransactionIssueService<PayModel>
{
}
Business.Accounting.Public
的 ClassLibrary
包含:
// namespace Business.Accounting.Public.IssueVouchers.Services
public abstract class IssueVoucherService : IIssueVoucherService
{
public IssueVoucherModel IssueVoucher(
PrimaryFiltersModel filtersModel,
IssueVoucherModel issuevoucher,
List<IssueVoucherSubModel> details)
{
//implementation
}
}
// namespace Business.Accounting.Public.IssueVouchers.Interfaces
public interface IIssueVoucherService
{
IssueVoucherModel IssueVoucher(
PrimaryFiltersModel filtersModel,
IssueVoucherModel issuevoucher,
List<IssueVoucherSubModel> details);
}
此外 Business.Treasury
参考了 Business.Accounting.Public
和 Business.Treasury.Public
。 Business.Treasury.Public
也引用了 Business.Accounting.Public
。很明显,由于继承,PayIssueService
继承了 IssueVoucher
方法。整个项目将 IOCContainer
用于 DependencyInjection
最后,在另一个 ClassLibrary
中,我正在实施 API
并使用 IPayIssueService
:
// namespace WebApi.Treasury.Controllers.V01.Voucher
public class PayIssueVoucherController : ApiControllerBase
{
IPayIssueService _payIssueService;
PayIssueVoucherController()
{
_payIssueService = MyResolver.Container
.Resolve<IPayIssueService>(mvcValidationDictionary);
}
public async Task<IHttpActionResult> InsertAsync(
[FromBody] InsertPayIssueVoucherDto insertPayIssueVoucherDto)
{
//...
var res = _payIssueService.IssueVoucher(
new PrimaryFilterModel(),
issueVoucherModel,
lstIssueVoucherSubModel);
//...
}
}
当我想调用 IssueVoucher
时它抛出异常:IPayIssueService does not contain a definition for IssueVoucher
。当我的 Class
继承 IssueVoucher
方法时,为什么代码抛出这个异常?
当我看到异常的 Stack Trace
时,它有这条消息:Anonymously Hosted DynamicMethods Assembly
。在我的代码的一部分中,在 PayIssueVoucherController
中,我使用了方法 which returns dynamic
value:
private dynamic OtherParam()
{
return new AccountingVoucherIssuanceModel
{
CompanyID = Common.Security.Authorization.Authorization.CurrentCompanyId,
FiscalYearID = Common.Security.Authorization.Authorization.CurrentYearId,
AccVchIssMergeDebitArticles = false,
AccVchIssMergeCreditArticles = false,
};
}
我在InsertAsync
中使用了它:
///...
var otherParam = OtherParam();
var lstIssueVoucherSubModel = GetIssueSubListModel(insertPayIssueVoucherDto, otherParam);
///...
我不知道为什么它与PayIssueVoucherController
中的另一个方法有关,但是将OtherParam
的输出类型更改为Class
解决了我的问题!如果有人知道原因,它将帮助我理解为什么会导致错误!
在我正在处理的项目中,Interface
和 Class
之间有如下结构:
Business.Treasury
的 ClassLibrary
包含:
// namespace Business.Treasury.FiscalTransaction.Services
internal class PayIssueService
: FiscalTransactionIssueService<PayModel, PY_Pay_c, v_PY_Pay_c,
PaySubModel, TransactionDistributionModel>
, IPayIssueService
{
}
// namespace Business.Treasury.FiscalTransaction.Services
internal class FiscalTransactionIssueService<TMasterModel,
TMasterEntity, TMasterVwEntity, TMajorDetailModel,
TMinorDetailModel>
: IssueVoucherService, IFiscalTransactionIssueService<TMasterModel>
{
}
Business.Treasury.Public
的 ClassLibrary
包含:
// ns: Business.Treasury.Public.FiscalTransaction.Interfaces.Services
public interface IFiscalTransactionIssueService<TMasterModel>
: IIssueVoucherService
{
}
// ns: Business.Treasury.Public.FiscalTransaction.Interfaces.Services
public interface IPayIssueService
: IFiscalTransactionIssueService<PayModel>
{
}
Business.Accounting.Public
的 ClassLibrary
包含:
// namespace Business.Accounting.Public.IssueVouchers.Services
public abstract class IssueVoucherService : IIssueVoucherService
{
public IssueVoucherModel IssueVoucher(
PrimaryFiltersModel filtersModel,
IssueVoucherModel issuevoucher,
List<IssueVoucherSubModel> details)
{
//implementation
}
}
// namespace Business.Accounting.Public.IssueVouchers.Interfaces
public interface IIssueVoucherService
{
IssueVoucherModel IssueVoucher(
PrimaryFiltersModel filtersModel,
IssueVoucherModel issuevoucher,
List<IssueVoucherSubModel> details);
}
此外 Business.Treasury
参考了 Business.Accounting.Public
和 Business.Treasury.Public
。 Business.Treasury.Public
也引用了 Business.Accounting.Public
。很明显,由于继承,PayIssueService
继承了 IssueVoucher
方法。整个项目将 IOCContainer
用于 DependencyInjection
最后,在另一个 ClassLibrary
中,我正在实施 API
并使用 IPayIssueService
:
// namespace WebApi.Treasury.Controllers.V01.Voucher
public class PayIssueVoucherController : ApiControllerBase
{
IPayIssueService _payIssueService;
PayIssueVoucherController()
{
_payIssueService = MyResolver.Container
.Resolve<IPayIssueService>(mvcValidationDictionary);
}
public async Task<IHttpActionResult> InsertAsync(
[FromBody] InsertPayIssueVoucherDto insertPayIssueVoucherDto)
{
//...
var res = _payIssueService.IssueVoucher(
new PrimaryFilterModel(),
issueVoucherModel,
lstIssueVoucherSubModel);
//...
}
}
当我想调用 IssueVoucher
时它抛出异常:IPayIssueService does not contain a definition for IssueVoucher
。当我的 Class
继承 IssueVoucher
方法时,为什么代码抛出这个异常?
当我看到异常的 Stack Trace
时,它有这条消息:Anonymously Hosted DynamicMethods Assembly
。在我的代码的一部分中,在 PayIssueVoucherController
中,我使用了方法 which returns dynamic
value:
private dynamic OtherParam()
{
return new AccountingVoucherIssuanceModel
{
CompanyID = Common.Security.Authorization.Authorization.CurrentCompanyId,
FiscalYearID = Common.Security.Authorization.Authorization.CurrentYearId,
AccVchIssMergeDebitArticles = false,
AccVchIssMergeCreditArticles = false,
};
}
我在InsertAsync
中使用了它:
///...
var otherParam = OtherParam();
var lstIssueVoucherSubModel = GetIssueSubListModel(insertPayIssueVoucherDto, otherParam);
///...
我不知道为什么它与PayIssueVoucherController
中的另一个方法有关,但是将OtherParam
的输出类型更改为Class
解决了我的问题!如果有人知道原因,它将帮助我理解为什么会导致错误!