我想在 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 类,但没有发现该组件的剃刀视图。
我还尝试扩展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 项目分开的程序集中的视图组件?