컨트롤러가 아닌 서비스 클래스에서 뷰 구성 요소를 호출해야합니다. 뷰 구성 요소를 문자열로 렌더링 한 다음 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)
해결책을 찾았습니까? –