簡體   English   中英

如何制作與 ninject 一起使用的通用 nhibernate 存儲庫?

[英]How to make a generic nhibernate repository that works with ninject?

我正在嘗試制作我的第一個通用存儲庫。 我從真正簡單的開始,但我不確定如何將它全部連接到 ninject 並通過構造函數注入使用它。

   public class NhibernateRepo<T> : INhibernateRepo<T>
    {
        private readonly ISession session;

        public NhibernateRepo(ISession session)
        {
            this.session = session;
        }

        public void Commit()
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                transaction.Commit();
            }
        }

        public void Delete(T entity)
        {
            session.Delete(entity);
        }

        public void Update(T entity)
        {
            session.Update(entity);
        }

        public T Get(object id)
        {
            return session.Get<T>(id);
        }

        public T Load(object id)
        {
            return session.Load<T>(id);
        }

        public void ReadOnly(object entity, bool readOnly = true)
        {
            session.SetReadOnly(entity, readOnly);
        }

        public void Evict(object entity)
        {
            session.Evict(entity);
        }

        public object Merge(object entity)
        {
            return session.Merge(entity);
        }
    } 

public interface INhibernateRepo<T>
    {
        void Commit();
        void Delete(T entity);
        void Update(T entity);
        T Get(object id);
        T Load(object id);
        void ReadOnly(object entity, bool readOnly = true);
        void Evict(object entity);
        object Merge(object entity);
    }
}

現在我想在我的服務層中使用它。 所以我試圖做

public MyServiceLayer(INhibernateRepo nhibernateRepo)

但它不喜歡那樣,所以我嘗試了

public  MyServiceLayer(INhibernateRepo<T> nhibernateRepo)

但它找不到T。

那么我該怎么做呢? 我猜進行綁定也將是一個挑戰,所以我不確定如何做到這一點。

嘗試將<T>從接口級別移動到方法級別。 像這樣:

public void Delete<T>(T instance) ...

暫無
暫無

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

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