Внедрение зависимостей в mvc5 с использованием Unity не работает

Я использую версию Visual Studio 2015. Я установил единство от Nuget. Я попытался получить список пользователей из таблицы с первым подходом к коду, используя модель внедрения зависимостей. Я думаю, что я сделал ошибку при регистрации контейнера, может кто-нибудь подсказать мне правильно зарегистрировать контейнер. Когда я попытался запустить этот код, он выдает ошибку типа "Для этого объекта не определен конструктор без параметров", я нашел его и нашел много решений, но они используют более старую версию unity, например unity5, в которой используется Microsoft.practice.unity. Я использую версию Unity 5.1.2. Если мой подход неверен, значит, пожалуйста, измените этот код для работы с единством. Заранее спасибо.

Код моей модели

 public class UserInfo
    {

        [Key]
        public int UserID { get; set; }

        [Required(ErrorMessage = "Please Enter The FirstName")]
        public string FirstName { get; set; }

        [EmailAddress(ErrorMessage = "Invalid Email Address")]
        [Required(ErrorMessage = "Please Enter The Email")]
        public string Email { get; set; }
}

Мой код интерфейса

public interface IUserInformation
    {
        IEnumerable<UserInfo> GetAll();
        UserInfo Get(int id);
        UserInfo Add(UserInfo item);
        bool Update(UserInfo item);
        bool Delete(int id);
    }

Мой код репозитория

 public class UserRepository:IUserInformation
    {
        private ProdDBContext db = new ProdDBContext();
        LogWriter obj1 = new LogWriter();
        public IEnumerable<UserInfo> GetAll()
        {
            try
            {
                return db.User.ToList();
            }
            catch (Exception ex)
            {
                obj1.WriteToFile("Error in User Index repository " + ex.Message);
                obj1.WriteToFile("Error in User Index repository " + DateTime.Now);

            }
            return db.User.ToList();

        }

Мой код контроллера

public class UserInformationController : Controller
    {

        private ProdDBContext db = new ProdDBContext();
        LogWriter obj1 = new LogWriter();
        readonly IUserInformation IuserInf;

       public UserInformationController(IUserInformation IuserInf)
        {
            this.IuserInf = IuserInf;
        }
            [CustomFilters]
            [CustomAuthorize(Roles = "admin")]
            public ActionResult Index()
            {
                try
                {
                    var Userlist = IuserInf.GetAll();
                    return View(Userlist);

                }
                catch (Exception ex)
                {
                    obj1.WriteToFile("Error in User Index page" + ex.Message);
                    obj1.WriteToFile("Error in User Index page" + DateTime.Now);

                }
                return View();
            }
}

Мой конфигурационный файл в запуске приложения

public class UnityConfig
    {

  private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();


        register all your components with the container here
        container.RegisterType<IUserInformation, UserRepository>();

        return container;
    }
}

наконец я зарегистрировал свой глобальный код ascx как

UnityConfig.BuildUnityContainer();

1 ответ

В UserRepository отсутствует конструктор без параметров

public UserRepository() { }

по умолчанию конструктор без параметров является закрытым, и из-за этого Unity не может создать свой экземпляр

Другие вопросы по тегам