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 작동해야하지만 난 그것을 정렬 얻을 수 있었다 havent 한 :

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 컨테이너를 구성해야 할 것이다. 하는 ASP.NET에서 컨트롤러를 해결하려면

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

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에서 호출 : 일반적인 관행처럼 등록을 처리하기 위해 정적 방법, 부트 스트 래퍼를 만드는 것입니다 MVC4 응용 프로그램에서는 표준 Controller 팩토리 구현을 바꿔야합니다. 자세한 내용은 Unity documentation on MSDN을 확인하십시오. 이 표준 UnityDependencyResolver 구현, 당신은 단지에 등록 할 필요가 용기를 사용할 수 nuget 패키지 "ASP.NET MVC에 대한 유니티 부트 스트 래퍼"입니다 : 여기

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

이것들은 모두 완료됩니다. 이제 global.asax에서 actionresult를 호출해야하며 actionresult가 거기에 앉아있는 컨트롤러를 해결하는 방법을 찾을 수 없습니다. – user3311522

관련 문제