Я хотел бы определить компоненты представления (которые являются новыми в ASP.NET MVC 6) в отдельной сборке из проекта веб-запуска MVC 6, чтобы я мог повторно использовать их в нескольких веб-проектах. Примерное решение может выглядеть так:
- BookStore.Components(общие компоненты представления для дома)
- BookStore.Web1 (ссылки BookStore.Components)
- BookStore.Web2 (ссылки BookStore.Components)
Я создал новую библиотеку классов (Package) и создал компонент вида внутри. Я также создал представление в соответствии с соглашением вложенных папок. Мой проект BookStore.Components
выглядит следующим образом:
Когда я пытаюсь вызвать этот компонент вида из моего веб-проекта:
@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;
}
}
}
Registered AssemblyProvider с использованием Autofac
builder.RegisterType<AssemblyProvider>()
.AsImplementedInterfaces();
builder.RegisterType<DefaultViewComponentDescriptorProvider>()
.AsImplementedInterfaces();
Я не уверен, нужна ли регистрация DefaultViewComponentDescriptorProvider
выше или нет, поэтому я попытался с ней и без нее, но я все еще получаю ошибку 500 на странице, на которой вызывается компонент вида.
Как я могу вызвать компонент вида, который живет в отдельной сборке из веб-проекта MVC6?