重写虚拟泛型方法

问题描述 投票:0回答:1

我有一个像这样的通用方法:

public class DomainServiceBase<TEntity> : IDomainServiceBase<TEntity> where TEntity : class
{
    public virtual async Task<bool> InsertAndSaveAsync<TRequest>(TRequest request)
    {
        // Implementations
    }
}

我在另一个类中重写它,如下所示:

public class AnnouncementDomainService : DomainServiceBase<AnnouncementDataModel>, IAnnouncementDomainService
{
    public override async Task<bool> InsertAndSaveAsync<AnnouncementAddRequest>(AnnouncementAddRequest request)
    {
        // an example of my issue
        var title =  request.Title // here i get CS1061 error

        // Implementations
    }
}

我无权访问AnnouncementAddRequest 属性。

这是AnnouncementAddRequest模型:

    public class AnnouncementAddRequest
    {
        public string Title { get; set; }
        public string Code { get; set; }
        public string? Description { get; set; }
        public bool IsActive { get; set; }
        public AnnouncementAddRequest()
        {
            Title = string.Empty;
            Code = string.Empty;
        }
    }

如您所见,所有属性都是公共的 我附上 Visual Studio IntelliSense 的屏幕截图

enter image description here

我正在尝试重写派生类中的虚拟泛型方法,以便我可以进行验证,并在最后执行

await base.InsertAndSaveAsync(request)

c# .net generics overriding virtual
1个回答
0
投票

看来请求类型也应该是

DomainServiceBase
的类型参数:

public class DomainServiceBase<TEntity, TRequest>
{
    public virtual async Task<bool> InsertAndSaveAsync(TRequest request)
    {
        // Implementations
    }
}

public class AnnouncementDomainService 
  : DomainServiceBase<AnnouncementDataModel, AnnouncementAddRequest>
  , IAnnouncementDomainService
{
    public override async Task<bool> InsertAndSaveAsync(AnnouncementAddRequest request)
    {
        // Implementations
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.