gpt4 book ai didi

c# - 检查 'this' 是否实现了一个接口(interface),然后从子类的通用基类内部调用它的成员?

转载 作者:太空宇宙 更新时间:2023-11-03 21:16:44 25 4
gpt4 key购买 nike

我在 .NET MVC 中使用 Entity Framework 和 C#。我为 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() 的返回值而不是 this

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

关于c# - 检查 'this' 是否实现了一个接口(interface),然后从子类的通用基类内部调用它的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com