加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 如何在Asp.net核心服务类中调用View组件?

发布时间:2020-12-16 09:41:08 所属栏目:asp.Net 来源:网络整理
导读:我需要在服务类(而不是控制器)中调用视图组件.我的目标是将视图组件呈现为字符串,然后处理 HtmlString. 我可以找到帮助在ActionContext可用的控制器中呈现视图组件但我无法从控制器调用我的服务.有什么帮助吗?我很高兴使用Mock和默认依赖注入. 目前,我正在
我需要在服务类(而不是控制器)中调用视图组件.我的目标是将视图组件呈现为字符串,然后处理 HtmlString.

我可以找到帮助在ActionContext可用的控制器中呈现视图组件但我无法从控制器调用我的服务.有什么帮助吗?我很高兴使用Mock和默认依赖注入.

目前,我正在使用mvc 6 beta 2.这是我班级的代码

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)

解决方法

在启动文件的ConfigureServices部分中,您需要注册您的服务,即:

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

                services.AddTransient...
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读