Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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# 使用unity解析global.asax中的HomeController_C#_Asp.net Mvc_Dependency Injection_Unity Container_Global Asax - Fatal编程技术网

C# 使用unity解析global.asax中的HomeController

C# 使用unity解析global.asax中的HomeController,c#,asp.net-mvc,dependency-injection,unity-container,global-asax,C#,Asp.net Mvc,Dependency Injection,Unity Container,Global Asax,我有一个具有依赖注入的控制器 家庭控制器的构造: public HomeController(ICustomer customer, ISiteSettings siteSettings, ILogger logger, ILocalizer localizer) : base(customer, siteSettings, logger, localizer) { } 我想使用以下代码从global.asax返回actionresult: IContr

我有一个具有依赖注入的控制器

家庭控制器的构造:

    public HomeController(ICustomer customer, ISiteSettings siteSettings, ILogger logger, ILocalizer localizer)
        : base(customer, siteSettings, logger, localizer)
    {
    }
我想使用以下代码从global.asax返回actionresult:

IController controller = new HomeController(dependency should go here);
我希望unity解决依赖关系(客户、站点设置、记录器、定位器),而不是在global.asax上再创建一次依赖关系并将其传递给controller

下面这样的代码应该可以工作,但我一直无法对其进行排序:

IController controller = UnityManager.Instance.Resolve(controllerType) as IController;

您首先必须配置Unity DI容器。通常的做法是创建一个引导程序,使用静态方法处理注册,如:

public class ContainerBootstrapper {
    public static void RegisterTypes(IUnityContainer container) {
        container.RegisterType<ICustomer, CustomerImplementation>(/* configure your class implementation here */);
        container.RegisterType<ISiteSettings, SettingsImplementation>(...);
        container.RegisterType<ILogger, LoggerImplementation(...));
        ...

    }
}
要解析ASP.NET MVC4应用程序中的控制器,需要替换标准控制器工厂实现。有关更多信息,请查看。 有一个“Unity bootstrapper for ASP.NET MVC”nuget软件包可用,它包含了一个标准的
UnityDependencyResolver
实现,您只需向以下注册即可:

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

以下是我最终解决问题的方法:

IController controller = ControllerBuilder.Current.GetControllerFactory().CreateController(HttpContext.Current.Request.RequestContext, "Home"); 
controller.Execute(new RequestContext(new HttpContextWrapper(context), routeData));

这些都完成了。现在我需要在global.asax中调用actionresult,我无法找到如何解析actionresult所在的控制器。
IController controller = ControllerBuilder.Current.GetControllerFactory().CreateController(HttpContext.Current.Request.RequestContext, "Home"); 
controller.Execute(new RequestContext(new HttpContextWrapper(context), routeData));