Scaffolding Entity Framework Контроллеры с Lamar

Я установил Lamar в своем проекте.NET Core 2:

    public class Program
    {
        public static void Main(string[] args)
        {
            IWebHost webhost = CreateWebHostBuilder(args).Build();
            //((Container)webhost.Services).GetInstance<IStart>().Run();
            webhost.Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseLamar()
                .UseStartup<Startup>();
    }

...

    public class Startup
    {
    ...
        public void ConfigureContainer(ServiceRegistry services)
        {
            services.Configure<Configuration.Auth>("auth", Configuration);
            ...
            services.Scan(s =>
            {
                s.TheCallingAssembly();
                s.WithDefaultConventions();
            });
            services.AddCors();
            services.AddMvc()
                .AddJsonOptions(o =>
                {
                    o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    o.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddDbContext<Context>(options => options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));
        }
    }

Однако при попытке использовать Scaffold API Controller с действиями, используя Entity Framework, я сталкиваюсь со следующей ошибкой:

Произошла ошибка при запуске выбранного генератора кода: "Для этого объекта не определен конструктор без параметров".

Просматривая этот https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/?view=aspnetcore-2.2, можно предположить, что это может показать в проектах ASP.NET Core 2, которые все еще пытаются использовать структуру.NET 1.x.

Я нашел хакерский обходной путь, который я опубликую ниже, что говорит о том, что генерация кода скаффолдинга может иметь проблемы с Lamar. Однако есть ли лучшее решение? Можете ли вы настроить Lamar для обработки кода Entity Framework?

1 ответ

Учитывая, что EF не сработал в разделе генерации кода, я подумал, что, возможно, проблема не в конструкторе без параметров (я почти уверен, что любой безымянный объект, на который он ссылается, действительно имеет его), а в том, как WebHost создается при использовании Lamar.

Примечание в документации Lamar по интеграции с основными состояниями ASP.NET

Заметка! Startup.ConfigureServices(ServiceRegistry) соглашение не работает с ASP.Net Core 2.1. использование ConfigureContainer(ServiceRegistry) вместо.

Я использовал эту функцию Lamar в моем стартапе; Однако, если я изменил его обратно на ConfigureContainer(IServiceCollection services) (и прокомментировал специфичные для Ламара функции, такие как Сканирование), я обнаружил, что смог снова построить EF-контроллер.

Итак, на данный момент мой обходной путь - закомментировать Ламара перед созданием лесов, а затем раскомментировать его, как только я закончу. Я подозреваю, что может быть лучшее решение, хотя...

Другие вопросы по тегам