user2007879
user2007879

Reputation: 43

instantiate the implementation class of Depenency injection using unity framework in mvc 3

I have a login controller which accept the instance of user and in login method it call the Validate user correctly but the problem arises in UserManager if i include a constructor in a similar manner

    public LoginController(IUser user)
    {
        this.user = user;
    }
    [httpPost]
    public ActionResult Login(UserLogin model)
    {
        if (ModelState.IsValid)
        {
           // var userMgr = new UserManager();

            if (user.ValidateUser(model.UserName, model.Password))
            {

                  return RedirectToAction("Index", "Home");

            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is        incorrect.");
            }
            // return View("UserLogin");
        }

following is where the problem arises

 public class UserManager : IUser 
 {

     IUser _user;

    public UserManager(IUser user)
   {
      _user=user;
   }

   public void displayUser()
   {
      //.......
     //.....    

   }

  public void somefunction()
 {
    _user.displayUser();
 }

}

The reason i am using the UserManager() constructor is because because i want to use _user.displayUser()

I have made the configuration in global.aspx like the following

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        var container = Container.InitContainer();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
     }

and Container.InitContainer() call the following class

       public static class Container
       {
         public static IUnityContainer InitContainer()
         {

            var container = new UnityContainer();
          // Register the relevant types for the         

          // container here through classes or configuration    

          //container.RegisterType<IUser, UserManager>(new                         ContainerControlledLifetimeManager());

        container.RegisterType<IUser, UserManager>(new ContainerControlledLifetimeManager());



        return container;

    } 

and I have UnityDepdendency resolver class as follows

   public class UnityDependencyResolver : IDependencyResolver
   {
        private IUnityContainer _container;

      #region Ctor

      public UnityDependencyResolver(IUnityContainer container)
      {

          _container = container;

      }



    #endregion

    public object GetService(Type serviceType)
    {
        try
        {

            return _container.Resolve(serviceType);

        }

        catch (Exception ex)
        {

            return null;

        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {

            return _container.ResolveAll(serviceType);

        }

        catch (Exception ex)
        {

            return new List<object>();

        }
    }
} 

Upvotes: 1

Views: 234

Answers (1)

user2007879
user2007879

Reputation: 43

We can use this.displayUser();

UserManager userobj=new UserManager() is not required

Upvotes: 1

Related Questions