If you have ever struggled with using HttpContext in your ASP.NET MVC Web Applications in regards to developing applications that can be easily tested, then you will be happy to know that this problem can be readily solved using HttpContextBase
and an IoC container such as Ninject
public class CookieManager : ICookieManager
private HttpContextBase _context;
public CookieManager(HttpContextBase context)
_context = context;
public HttpCookie GetCookie(string cookieName)
HttpCookie cookie = null;
if (_context != null)
cookie = _context.Request.Cookies[cookieName];
Now the problem arose as to how to use an IoC container such as Ninject to handle injecting the proper HttpContext?
First of all, if you do not inject your HttpContext, you will receive an error something like shown below:
Well, there are 2 possible ways of accomplishing this:
kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));
The above method will inject HttpContext into any
class that is dependent on HttpContextBase, therefore, making your development relatively easy to maintain going forward.
If you want to be more explicit
about your HttpContextBase dependencies, you can instead do something like the following:
kernel.Bind<ICookieManager>().To<CookieManager>().WithConstructorArgument("context", ctx => new HttpContextWrapper(HttpContext.Current));
Therefore, as you can see, now you can easily inject an instance of HttpContext using HttpContextBase as well as easily Unit Test your applications using a Mocking Framework such as Moq by leveraging an interface such as the ICookieManager
interface I have used in my above code samples.
That is all there is to it!!