Monday 15 July 2013

c# - Initialize ASP.NET MVC controller using current user ID -



c# - Initialize ASP.NET MVC controller using current user ID -

i've created asp.net mvc controller responds info data repository. repository pretty simple (underlying ef6 backend) , info specific user. actions typically this:

public class mycontroller : controller { private irepository _repository = new mydatacontextrepository(); [httppost] [authorize] public actionresult getmydata() { var result = _repository.getdata(membership.getuser().provideruserkey); homecoming json(result); } }

but because i'll using user'd id in calls, i'd initialize repository current user's id instead, so.

public class mycontroller : controller { private irepository _repository = new mydatacontextrepository(membership.getuser().provideruserkey); [httppost] [authorize] public actionresult getmydata() { var result = _repository.getdata(); homecoming json(result); } }

the problem here constructor run before user's officially logged in, getuser() looks username "" (user not authorized yet).

is possible initialize info repository 1 time after user has been authenticated? or can identify user during action method's call?

standard practice should pass user id repository methods parameter, rather basing whole repository upon it.

but if want how are, can wrap _repository in property , create first time called. simple way utilize lazy<t> class. in way constructor called first time repository used , user should available then:

public class mycontroller : controller { private lazy<irepository> _repository = new lazy<irepository>( () => new mydatacontextrepository(membership.getuser().provideruserkey)); private irepository repository { { homecoming _repository.value; } } [httppost] [authorize] public actionresult getmydata() { var result = repository.getdata(); // repository constructor called here homecoming json(result); } }

c# asp.net-mvc asp.net-mvc-4

No comments:

Post a Comment