c# - AOP: Custom Model Binder Attribute using Ninject -


in short: trying create custom model binder take in type of user , id, use service class retrieve typed object.

if there better way this, please let me know.

elabaration:

i have ninject setup bindings within domainservice layer, 3 web ui's hooked domain service layer. each asp.net mvc app loads bindings kernal.

//my custom model binder

public class usermodelbinder : imodelbinder     {         private iauthenticationservice auth;          public usermodelbinder(iauthenticationservice _auth, entityname type,          string loggedonuserid)         {             this.auth = _auth;             currentusertype = type;             currentuserid = loggedonuserid;         }           public entityname currentusertype { get; private set; }         private string currentuserid {  get; set; }          public object bindmodel(controllercontext controllercontext,          modelbindingcontext bindingcontext)         {             object loggedonuser = null;              if (currentusertype == entityname.client)                 loggedonuser = getloggedonclientuser(currentuserid);             else if (currentusertype == entityname.shop)                 loggedonuser = getloggedonshopuser(currentuserid);             else                 throw new notimplementedexception();              return loggedonuser;         }          public clientuser getloggedonclientuser(string loggedonuserid)         {             var user = _auth.getloggedonclientuser(loggedonuserid);             if (user == null)                 throw new noaccessexception();              return user;         }          public shopuser getloggedonshopuser(string loggedonuserid)         {             var user = _auth.getloggedonshopuser(loggedonuserid);             if (user == null)                 throw new noaccessexception();              return user;         }      } 

my global.aspx.cs

// using ninject override application started         protected override void onapplicationstarted()         {             arearegistration.registerallareas();             // hand on control ninject register controllers             registerroutes(routetable.routes);     //how instantiate?             modelbinders.binders.add(typeof(object), new              usermodelbinder(null,entityname.client, user.identity.name));          } 

my problem iauthentication service, connected other things repository, how instantiate properly? should create new ninjectmodule? confused appreciated. have tried pass in container.get(); - null...

note: reason why creating modelbinder- controllers require type of user service layer requires type of user making request, methods in service layer have overloads 1 thing shopuser or clientuser or other user in system...

edit: easiy within controller call upon iauthenticationservice , type of user , pass domainservice layer process relevant tasks want know how possible modelbindings (and if makes sense way).

edit2: there working sample of using custom attribute aop custom attribute calling/binding/getting instance of isomethingservice?

you can use service locator pattern here. pass ninject container (ikernel?) constructor , resolve authenticationservice each time need bind something.

a refinement of have constructor argument func pass function resolve service. more explicit , removes dependency on ninject. this:

public class mymodelbinder : imodelbinder {     func<iauthenticationservice> _resolveauthservice;      public mymodelbinder(func<iauthenticationservice> resolveauthservice)     {          _resolveauthservice = resolveauthservice;     }      public override object bind(context c)     {         var authservice = _resolveauthservice();          authservice.getsomething();          // etc...     } } 

Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -