Внедрение зависимостей в 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 не может создать свой экземпляр