1

ユーザーのインスタンスを受け入れるログインコントローラーがあり、ログインメソッドでValidateユーザーを正しく呼び出しますが、同様の方法でコンストラクターを含めるとUserManagerで問題が発生します

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

        }
    }
} 
4

1 に答える 1

1

使用できますthis.displayUser();

UserManager userobj=new UserManager() 必須ではありません

于 2013-03-20T10:57:49.903 に答える