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