检查';这';实现一个接口,然后从子类的泛型基类内部调用其成员

本文关键字:泛型 基类 子类 调用 成员 然后 内部 接口 实现 检查 一个 | 更新日期: 2023-09-27 18:21:48

我正在使用带有C#的.NET MVC中的实体框架。我为POCO制作了一个接口,我想跟踪他们的更改(基于POCO的自定义逻辑,而不是EF已经可以做的)。接口:

public interface ITrackChangesService<TClass>
    {
        void SaveChanges(TClass entity);
    }

我正试图在我的EntitySevice中使用这一点,所有POCO服务都继承自EntityService:的声明

 public abstract class EntityService<TRepositoryClass, TClass, TDbContext>
    where TClass : Entity, new()
    where TDbContext : DbContext, new()
    where TRepositoryClass : EntityRepository<TClass, TDbContext>, new()
{

正如我的评论所示,我正在尝试检查当Save从UserService:这样的子类调用时

public class UserService : EntityService<UserRepository, User, MyDbContext>, ITrackChangesService<User>

要查看UserService是否实现ITrackChangesService,如果是,请调用它的SaveChanges方法

public virtual void Save(TClass entity)
    {
        if (entity != null)
        {
            entity.LastModifiedBy = SessionUtil.UserAbsolute == null ? "System" : SessionUtil.UserAbsolute.NetId;
            if (Exists(entity))
            {
                entity.DateModified = DateTime.Now;
                //if(this is ITrackChangesService<TClass>)
                //{
                //    (ITrackChangesService<TClass>) this.SaveChanges(entity);
                //}
                Repository.Update(entity);
            }
            else
            {
                entity.CreatedBy = SessionUtil.UserAbsolute == null ? "System" : SessionUtil.UserAbsolute.NetId;
                entity.DateCreated = DateTime.Now;
                Repository.Insert(entity);
            }
        }
    }

然而,我似乎无法从调用子类中调用SaveChanges方法。.SaveChanges无法识别。我该如何让别人认出我。

检查';这';实现一个接口,然后从子类的泛型基类内部调用其成员

您正在强制转换this.SaveChanges()的返回值,而不是this

var trackChangesService = this as ITrackChangesService<TClass>;
if(trackChangesService != null)
{
    trackChangesService.SaveChanges(entity);
}