1

我有一个登录控制器,它接受用户的实例,并在登录方法中调用 正确验证用户,但问题出现在UserManager中,如果我包含构造函数以类似的方式使用mvc中的统一框架实例化Depenency注入的实现类3

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"); 
     } 

以下是其中出现问题

public class UserManager : IUser 
{ 

    IUser _user; 

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

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

    } 

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

}

原因我使用在的UserManager()构造函数是因为,因为我想用_user.displayUser()

我所做的配置在global.aspx像下面

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

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

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

和Container.InitContainer()调用下面类

 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; 

    } 

,我有UnityDepdendency解析器类如下

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>(); 

     } 
    } 
} 
+0

所以,你有一个'UserManager'类必须被注入到自身?你甚至认为这是可能的,即使没有DI容器? – Steven 2013-03-19 12:13:26

+0

嗨,我是新来的DI和Unity框架,并想知道如果我可以配置这样一种方式,我可以使用构造函数来设置UserManager中的实例是否有可能做到这一点?cus我不想用户UserManager userobj = new UserManager ()在UserManager类 – user2007879 2013-03-20 06:44:30

+1

但为什么?在UserManager类中创建一个新的UserManager有什么用处。退后一步,看看设计。为什么不简单地做:'public void somefunction(){this.displayUser(); }'??? – Steven 2013-03-20 08:41:52

回答

1

我们可以使用this.displayUser();

UserManager userobj=new UserManager()不需要