0

我一直致力於使用Unit of Work和DI的EF Repository模式。我正在關注這個示例:link在示例中,將Unity用作DI容器,但我想使用Ninject。 (注意:在Unity中,一切正常)。 所以我建立了我的Ninject控制器工廠:link。 當我去我的控制器並嘗試列出消息時,它工作正常,但是當我嘗試創建消息沒有任何反應時,值傳遞給控制器​​和存儲庫,但由於某種原因數據不會保存到數據庫。 這裏是控制器的構造函數:依賴注射與Unity一起工作,但不與Ninject一起使用

private readonly IUserRepository _userRepository; 
    private readonly IMessageThreadRepository _messageThreadRepository; 

    public TetsController(IMessageThreadRepository messageThreadRepository, IUserRepository userRepository) 
    { 
     _messageThreadRepository = messageThreadRepository; 
     _userRepository = userRepository; 
    } 

這裏是messageThreadRepository代碼正在由控制器稱爲

public class MessageThreadRepository : RepositoryBase<MessageThread>, IMessageThreadRepository 
{ 
    private readonly RepositoryBase<MessageThread> _messageThreadRepository; 
    private readonly RepositoryBase<Message> _messageRepository; 
    private readonly IUnitOfWork _unitOfWork; 
    private readonly UserRepository _userRepository; 

    public MessageThreadRepository(IUnitOfWork unitOfWork, RepositoryBase<MessageThread> messageThreadRepository, 
            IDatabaseContextFactory databaseContextFactory, UserRepository userRepository, RepositoryBase<Message> messageRepository) 
     : base(databaseContextFactory) 
    { 
     _unitOfWork = unitOfWork; 
     _messageThreadRepository = messageThreadRepository; 
     _userRepository = userRepository; 
     _messageRepository = messageRepository; 
    } 
//some code here 
// part with adding to database 
    Message message = messageFactory.CreateMessage(messageBody, userSender, messageThread); 

     _messageRepository.Add(message); 

     if (!doesThreadExist) 
     { 
      _messageThreadRepository.Add(messageThread); 
     } 

     _unitOfWork.Commit(); 
} 

編輯 我試圖將用戶添加到數據庫中,但沒有運氣。我再次設法獲取所有用戶,但我不能在其中添加,這裏是用戶庫:

public class UserRepository : RepositoryBase<User>, IUserRepository 
{ 
    private readonly IUnitOfWork _unitOfWork; 
    private readonly RepositoryBase<User> _repository; 

    public UserRepository(IUnitOfWork unitOfWork, IDatabaseContextFactory databaseContextFactory, RepositoryBase<User> repository) : base (databaseContextFactory) 
    { 
     _unitOfWork = unitOfWork; 
     _repository = repository; 
    } 

    public User GetUserById(int id) 
    { 
     return _repository.GetSingleByCriteria(u => u.UserId.Equals(id)); 
    } 

    public User GetUserByEmail(string email) 
    { 
     return _repository.GetSingleByCriteria(u => u.Email.Equals(email)); 
    } 

    public User GetUserByUserName(string name) 
    { 
     return _repository.GetSingleByCriteria(u => u.UserName.Equals(name)); 
    } 

    public void AddUser(User user) 
    { 
     _repository.Add(user); 
     _unitOfWork.Commit(); 
    } 

    public IEnumerable<User> GetAllUsers() 
    { 
     return _repository.GetAll(); 
    } 
} 

回答

0

我假設你使用MVC,因爲你參考關於使用它與MVC的文章。

您是否在這裏提到過所有步驟?

http://bubblogging.wordpress.com/2012/06/04/mvc-controller-factory-ninject/

你爲什麼要使用使用內置的依賴注入支持MVC的,使用Ninject.MVC3包的自定義控制器工廠呢?

+0

是的我使用它與MVC,我已經完成了所有步驟提到那裏,而我不使用自定義控制器工廠,我使用Ninject.MVC3包,我不相信問題與控制器,作爲控制器獲取所有數據,顯示數據。我相信Ninject與我的存儲庫有問題。 – hyperN

+0

@hyperN - 因爲你沒有包含你的Ninject配置代碼,所以我們只能猜測。但看起來你可能在庫中創建了兩個DbContext,在UnitOfWork中創建了一個。您將用戶添加到存儲庫,但在UnitOfWork上調用SaveChanges,因此沒有任何事情可以保存,因爲UoW上下文中沒有任何內容。 –

+0

@hyperN - 另外,當你說你在問題中時,你爲什麼說你沒有使用控制器工廠? –

相關問題