【发布时间】:2015-12-12 06:01:30
【问题描述】:
我想在独立于 MVC 6 Web 启动项目的程序集中定义视图组件(在 ASP.NET MVC 6 中是新的),以便我可以在多个 Web 项目中重用它们。示例解决方案可能如下所示:
- BookStore.Components (包含通用视图组件)
- BookStore.Web1 (引用 BookStore.Components)
- BookStore.Web2 (引用 BookStore.Components)
我创建了一个新的类库(包)并在里面创建了一个视图组件。我还按照嵌套文件夹约定创建了视图。我的BookStore.Components 项目如下所示:
当我尝试从我的 Web 项目中调用此视图组件时:
@Component.Invoke("BookOfTheMonth")
...我收到一个 500 错误,内容为空。似乎发现了 ViewComponent 类,但没有发现该组件的 razor 视图。
我还尝试扩展 DefaultViewComponentDescriptorProvider 以便可以发现来自 BookStore.Components 程序集的视图组件:
定义了一个 AssemblyProvider
public class AssemblyProvider : IAssemblyProvider
{
public IEnumerable<Assembly> CandidateAssemblies
{
get
{
yield return typeof(AssemblyProvider).Assembly;
yield return typeof(BookStore.Components.BookOfTheMonthViewComponent).Assembly;
}
}
}
使用 Autofac 注册的 AssemblyProvider
builder.RegisterType<AssemblyProvider>()
.AsImplementedInterfaces();
builder.RegisterType<DefaultViewComponentDescriptorProvider>()
.AsImplementedInterfaces();
我不确定是否需要注册上面的DefaultViewComponentDescriptorProvider,所以我尝试了有无它,但在调用视图组件的页面上仍然出现500错误。
如何调用与 MVC6 Web 项目分开的程序集中的视图组件?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc asp.net-core-viewcomponent