0

Unit of Work と DI を使用して EF リポジトリ パターンに取り組んできました。私はこの例に従っていました: link例では Unity を DI コンテナーとして使用していますが、Ninject を使用したいと考えています。(注: Unity ではすべて正常に動作します)。そこで、Ninject Controller Factory を次のようにセットアップしました: link。コントローラーに移動してメッセージをリストしようとすると正常に動作しますが、メッセージを作成しようとすると何も起こらず、値がコントローラーとリポジトリーに渡されますが、何らかの理由でデータがデータベースに保存されません。コントローラーコンストラクターは次のとおりです。

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

1 に答える 1

0

MVCでの使用に関する記事を参照しているため、MVCを使用していると思います。

ここに記載されているすべての手順を実行しましたか?

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

Ninject.MVC3 パッケージを使用して、MVC の組み込み依存性注入サポートを使用する代わりに、カスタム コントローラー ファクトリを使用するのはなぜですか?

于 2013-06-03T06:20:09.150 に答える