2015-02-05 1 views
4

컨트롤러가 아닌 서비스 클래스에서 뷰 구성 요소를 호출해야합니다. 뷰 구성 요소를 문자열로 렌더링 한 다음 HtmlString을 처리하려고합니다.Asp.net 핵심 서비스 클래스에서 View 구성 요소를 호출하는 방법은 무엇입니까?

ActionContext을 사용할 수 있지만 컨트롤러에서 서비스를 호출 할 수없는 컨트롤러에서보기 구성 요소를 렌더링하는 데 도움을받을 수 있습니다. 어떤 도움을 주시겠습니까? 모의 (Mock) 및 기본 의존성 주입을 사용하여 기쁘게 생각합니다.

현재, 내가 여기에 MVC 6 베타 2를 사용하고 당신은 당신의 시작 파일의 ConfigureServices 섹션에서 내 클래스의 코드

public class MyClass 
{ 
    Microsoft.AspNet.Mvc.DefaultViewComponentHelper viewComponentHelper = null; 
    Microsoft.AspNet.Mvc.Razor.RazorView razorView = null; 

    public MyClass(IViewComponentSelector selector, IViewComponentInvokerFactory factory, 
     IRazorPageFactory razorPageFactory, IRazorViewEngine razorViewEngine, IRazorPageActivator pageActivator, 
     IViewStartProvider viewStartProvider) 
    { 
     viewComponentHelper = new DefaultViewComponentHelper(selector, factory); 
     razorView = new RazorView(razorViewEngine, pageActivator, viewStartProvider, null, true); 
    } 

    public void MyAction 
    { 

     var view = new Mock<IView>().Object;  

     var actionContext = new ActionContext(new RouteContext(new DefaultHttpContext()), new ActionDescriptor()); 
     var viewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()); 
     var viewContext = new ViewContext(actionContext, view, viewData, TextWriter.Null); 

     viewComponentHelper.Contextualize(viewContext); 
     var result = viewComponentHelper.Invoke("MyView").ToString(); 
    } 
} 

내가 다음 무엇입니까 예외

at Microsoft.Framework.DependencyInjection.ServiceProviderExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentActivator.<>c__DisplayClass6.<CreateActivateInfo>b__7(ViewContext viewContext) 
    at Microsoft.AspNet.Mvc.PropertyActivator`1.Activate(Object view, TContext context) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentActivator.Activate(Object viewComponent, ViewContext context) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentInvoker.CreateComponent(ViewContext context) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentInvoker.InvokeSyncCore(MethodInfo method, ViewContext context) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentInvoker.Invoke(ViewComponentContext context) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentHelper.InvokeCore(TextWriter writer, Type componentType, Object[] arguments) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentHelper.Invoke(Type componentType, Object[] args) 
    at Microsoft.AspNet.Mvc.DefaultViewComponentHelper.Invoke(String name, Object[] args) 
+0

해결책을 찾았습니까? –

답변

1

입니다 예 :

public void ConfigureServices(IServiceCollection services) 
    { 
       // Add MVC services to the services container. 
       //services.AddMvc(); 

       services.AddTransient... 
    } 
+0

답변을 주셔서 감사 드리며, 시험해 보겠습니다. – eadam

관련 문제