使用Unity工作的mvc5中的依赖注入

时间:2017-11-10 07:12:54

标签: dependency-injection asp.net-mvc-5 ef-code-first unity-container c#-5.0

我正在使用visual studio 2015版。我从nuget安装了unity。我试图通过使用依赖注入模型的代码第一种方法从表中获取用户列表。我认为我在注册容器时犯了错误,任何人都可以指导我正确注册容器。当我试图运行此代码时,它显示错误,如“没有参数为此对象定义的构造函数”我谷歌它并找到了很多解决方案,但他们使用旧版本的统一,如使用Microsoft.practice.unity的unity5。我正在使用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();
            }
}

我在app app中的配置文件

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 个答案:

答案 0 :(得分:0)

UserRepository缺少无参数构造函数

public UserRepository() { }

默认情况下,无参数构造函数是私有的,因此Unity无法创建其实例