0

我有一個具有依賴注入的控制器。使用統一解析global.asax中的HomeController

構造家居控制器:

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); 

,我想統一解決的依賴(客戶, siteSettings,logger,localizer),而不是在global.asax上創建依賴關係,並將其傳遞給控制器​​。

somecode像下面應該工作,但我還沒有能夠得到它排序:

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

回答

0

,這裏是如何我終於解決了它:

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

你首先必須配置您的團結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(...)); 
     ... 

    } 
} 

,並從您的Global.asax調用它

var container = new UnityContainer(); 
ContainerBootstrap.RegisterTypes(container); 

在ASP.NET解決控制器MVC4應用程序,您需要更換標準的Controller工廠實現。欲瞭解更多信息,請查看Unity documentation on MSDN。 有一個「團結引導程序的ASP.NET MVC」 NuGet包可用,其中容器中的標準UnityDependencyResolver實現,你只需要註冊它:

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
+0

這些都已完成。現在我需要在global.asax中調用一個actionresult,而我無法找到如何解決actionresult坐在那裏的控制器。 – user3311522