Невозможно реализовать папки Feature в asp.net core 2.0 Web App - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь реализовать папки Feature в веб-приложении Core 2.0 с помощью пакета OdeToCode.AddFeatureFolders. Снимки экрана и фрагменты кода приведены ниже:

enter image description here

enter image description here

enter image description here

Ниже приведены 2 класса, которые я использовал для реализации функциональных папок:

namespace FeatureWebApp.Infrastructure.FeatureFolders
   {
    public class FeatureViewLocationExpander : IViewLocationExpander
     {
    public void PopulateValues(ViewLocationExpanderContext context)
    {

    }

    public IEnumerable<string> ExpandViewLocations(
        ViewLocationExpanderContext context,
        IEnumerable<string> viewLocations)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }
        if (viewLocations == null)
        {
            throw new ArgumentNullException(nameof(viewLocations));
        }

        // {0} - Action Name
        // {1} - Controller Name
        // {2} - Area name

        //Features
        yield return "/Features/{1}/{0}.cshtml";

        yield return "/Features/{2}/{0}.cshtml";

        yield return "/Features/{1}/{2}/{0}.cshtml";

        yield return "/Features/{1}/Views/{0}.cshtml";

        //Feature Areas
        yield return "/Features/{2}/{1}/{0}.cshtml";
        yield return "/Features/{2}/{1}/Views/{0}.cshtml";
        yield return "/Features/{2}/Shared/{0}.cshtml";

        //Shared
        yield return "/Features/Shared/{0}.cshtml";

    }
 }
 }


   namespace FeatureWebApp.Infrastructure.FeatureFolders
   {
    public static  class ServiceCollectionExtensions
    {
     public static IMvcBuilder AddFeatureFolders(this IMvcBuilder services)
    {
        if (services == null)
        {
            throw new ArgumentNullException(nameof(services));
        }

        services.AddRazorOptions(o =>
        {
            o.ViewLocationExpanders.Add(new FeatureViewLocationExpander());
        });

        return services;
    }
 }
}

Запуск .cs: -

 public void ConfigureServices(IServiceCollection services)
       {

        services.AddMvc().AddFeatureFolders();
       }

Проблема здесь в том, что если я не пишу [Route ("CreditCardAPI")] в контроллере creditcardapi, я не могу вызывать методы CreditCardAPI напрямую, используя "http: localhost: 00000 / CreditCardAPI". Это показывает мне ошибку "Веб-страница не найдена для веб-адреса: http://localhost:61452/CreditCardAPI"

Я уже написал [Area ("CreditCards")] над контроллером CreditCardAPI, как показано на рисунке выше. Где, как и в домашнем контроллере, я не объявил ни области, ни какого-либо маршрута, но могу вызывать методы домашнего контроллера (метод индекса по умолчанию) напрямую, без определения области муравья или маршрута.

enter image description here

Также, если я использую структуру вложенных папок, например -> Функции -> TroubleTickets -> Список-> Контроллер, представление, модель, относящуюся к списку, как показано на изображении выше, как я могу в этом случае вызвать методы контроллера CreditCardAPI?

Есть предложения или идеи? Какие-либо шаги, которые я здесь пропускаю?

1 Ответ

0 голосов
/ 07 августа 2018

Пакет OdeToCode.AddFeatureFolders имеет некоторые соглашения для пространств имен контроллеров.

См. Пример приложения. https://github.com/OdeToCode/AddFeatureFolders/blob/master/sample/WebApplication/Features/Bar/HomeController.cs

AddFeatureFolders uses the namespace of the controller to figure out where the views are.

Ошибка, которая у вас есть, не указывает на отсутствующее представление, но она все равно может быть связана с пространством имен вашего контроллера. Пожалуйста, покажите полный код контроллера

...