Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将会话和请求依赖项传递给MVC控制器?_C#_Asp.net Mvc - Fatal编程技术网

C# 如何将会话和请求依赖项传递给MVC控制器?

C# 如何将会话和请求依赖项传递给MVC控制器?,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个使用请求和会话对象的MVC操作 public ActionResult Index() { string eventTypeId = Request.QueryString[QueryStringFor.EventTypeId]; Session["eventTypeId"] = eventTypeId; return View(); } 如何使此操作单

我有一个使用请求和会话对象的MVC操作

public ActionResult Index()
        {            
            string eventTypeId = Request.QueryString[QueryStringFor.EventTypeId];

            Session["eventTypeId"] = eventTypeId; 

            return View();
        }
如何使此操作单元可测试

我应该在初始化控制器时传递和注入这些信息吗

我正在使用ControllerBuilder手动构建控制器(目前不使用IOC)


在asp.net mvc中,请求和会话已经分别是派生自和的类的对象。在单元测试期间模拟这些对象应该不会有问题

我理解您在测试方面的意思。如何将会话和请求传递给控制器以获取生产代码?HttpContext还是什么?@thelight:asp.netmvc已经为你做了。你想建立一个自定义的?你是对的,但如果我让他们必须注射然后。。。我的意思是,在单元测试中模拟这些对象之后,我希望将它们传递给我的控制器。我可以在测试中使用构造函数注入来通过测试,但如何在产品代码中通过测试。@提示:生产代码应该与单元测试代码类似。但是在生产代码中,这些信息是基于当前的httpcontext检索的。@TheLight:我认为您应该使用asp.net mvc框架的DefaultControllerFactory。如果需要扩展框架以添加DI功能,可以尝试实现IDependencyResolver并将其注册到框架中
ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory(new EvaluationCompositionRoot()));

 public class EvaluationCompositionRoot : IControllerActivator
    {
        public IController Create(RequestContext requestContext, Type controllerType)
        {