簡體   English   中英

檢查“ this”是否實現了接口,然后從通用基類內部為子類調用其成員?

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

我正在使用C#在.NET MVC中使用實體框架。 我為要跟蹤其更改的POCO創建了一個接口(基於POCO的自定義邏輯,而不是EF可以做到的)。 界面:

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

我試圖在所有POCO服務都繼承自EntityService的聲明的EntitySevice中使用此方法:

 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM