我想在MVC 6 Web启动项目的单独程序集中定义视图组件(ASP.NET MVC 6中的新组件),以便我可以在多个Web项目中重用它们.示例解决方案可能如下所示:
我创建了一个新的类库(Package)并在其中创建了一个视图组件.我还在嵌套文件夹约定之后创建了视图.我的BookStore.Components项目看起来像这样:
当我尝试从我的Web项目调用此视图组件时:
@Component.Invoke("BookOfTheMonth")
Run Code Online (Sandbox Code Playgroud)
...我的内容正文出现了500错误.似乎发现了ViewComponent类,但组件的剃刀视图却没有.
我还尝试扩展,DefaultViewComponentDescriptorProvider以便BookStore.Components可以发现程序集中的视图组件:
public class AssemblyProvider : IAssemblyProvider
{
public IEnumerable<Assembly> CandidateAssemblies
{
get
{
yield return typeof(AssemblyProvider).Assembly;
yield return typeof(BookStore.Components.BookOfTheMonthViewComponent).Assembly;
}
}
}
Run Code Online (Sandbox Code Playgroud)
builder.RegisterType<AssemblyProvider>()
.AsImplementedInterfaces();
builder.RegisterType<DefaultViewComponentDescriptorProvider>()
.AsImplementedInterfaces();
Run Code Online (Sandbox Code Playgroud)
我不确定是否DefaultViewComponentDescriptorProvider需要上面的注册,所以我尝试使用和不使用它,但我仍然在调用视图组件的页面上得到500错误.
如何从MVC6 Web项目中调用位于单独程序集中的视图组件?