检查 '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);
}
我在带有 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);
}