检查 'this' 是否实现了一个接口,然后从泛型基 class 内部调用它的成员为 subclass?

Check if 'this' implements an interface then call its member from inside generic base class for subclass?

我在带有 C# 的 .NET MVC 中使用 Entity Framework。我为 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()
{

如我的评论所示,我正在尝试检查是否从 UserService 等子类调用 Save 时:

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

查看 UserService 是否实现了 ITrackChangesService,如果是,调用它的 SaveChanges 方法。这是在我的实体服务中的 Save 方法中完成的:

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() 的 return 值而不是 this

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