cześć, usiłuje zrozumieć koncepcje działania i stosowania wstrzykiwania zależność po przez NINJECT. To co udało mi się zrozumieć, ninjec wspomaga budowę luźnych powiązań komponentów czyli pozwala na odseparowanie od siebie klas. Prościej mówiąc unikamy tworzenia obiektów modeli domeny w klasach kontrolera. Luźne powiązanie budowane jest za pomocą interfejsów. Idąc tym tokiem rozumowania zaimplementowałem również repozytorium, które jest abstrakcyjną warstwą dostępu do danych i posiada metody odpowiedzialne za komunikacje z bazą danych. Wszystko teoretycznie jest od siebie odseparowane. Tylko pojawia się problem w przypadku dodania czego do bazy np.

Klasa ninject, zbędnym jest umieszczanie całej klasy dlatego umieszczam jej część.

private void AddBindings()
        {
            kernelNinject.Bind<IUserRepository>().To<UserRepository>();
        }

UserRepository, czy poprawnym jest sposób inicjalizowania contextu bazy danych???? Czy może jednak w każdej z metod odwoływać się po przez using (var db = new Entities())??

public class UserRepository : IUserRepository
    {
        private Entities db = null;

        public UserRepository (Entities db)
        {
            this.db = db;
        }

        public void AddUser(User user){
        
           db.Users.Add(user);
       }
        public void Save()
        {
          db.SaveChanges();
        }
     }

ViewModel

public class RegisterUserModel
    {
        //Rejestracja

        [Required]
        public string Name { get; set; }

        [Required]
        public string Surname { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "Hasło musi być dłuższe niż 6 znaków.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        //[Display(Name = "Hasło:")]
        public string Password { get; set; }
}

Model

public partial class User
    {
        public User()
        {
            this.webpages_Roles = new HashSet<webpages_Roles>();
        }
    
        public int UserId { get; set; }
        public string Name{ get; set; }
        public string Surname{ get; set; }
        public string Password{ get; set; }

        public virtual ICollection<webpages_Roles> webpages_Roles { get; set; }
    }

Kontroler

[InitializeSimpleMembership]
    public class KontoController : Controller
    {
        private readonly IUserRepository UserRepository;

        public KontoController(IUserRepository UserRepository)
        {
            this.UserRepository = UserRepository;

        }

        [AllowAnonymous]
        public ActionResult Zarejestruj()
        {
            return View();
        }

        //
        // POST: /Account/Register

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Zarejestruj(RegisterUserModel model)
        {
           if(ModelState.IsValid)
           {
               UserRepository.AddUser() // jak przekazać obiekt User do metody AddUser, jeżeli nie możemy tworzyć obiektów domeny w controlerze??
            }

        }

Mógłbym otworzyć obiekt User w ViewModel'u natomiast stracę w tedy możliwość walidacji tych pól. Jak rozwiązać ten problem?? Proszę mnie poprawić jak klepie bzdury, krytyka jest wskazana do osiągnięcia celu :)
Pozdrawiam.