#c# #.net #.net-core
Вопрос:
У меня есть основной проект API, который первоначально получал доступ к базе данных с контроллера (плохая практика), поэтому я перенес методы доступа к данным в существующий .Библиотека сетевых классов, в которой строки подключения хранятся в файле app.config. Те же строки подключения также расположены в папках appsettings.json/appsettings.development.json проекта Core API.
Затем я попытался получить доступ к этому новому методу библиотеки классов .NET (содержащему вызов базы данных) из моего API, но я получаю ошибку «не удается найти имя строки подключения «в app.config». Я новичок в .NET, но коллега сказал, что, возможно, файл app.config не помещается в папку bin API. У кого-нибудь были проблемы с проектами .NET Core, которые пытались связаться со строками подключения проекта .NET, и как я мог бы устранить эту проблему?
1.) Я попытался вставить файл app.config в папку bin API, но безрезультатно (та же ошибка).
Я видел несколько ответов на SO, но не смог их успешно реализовать, поэтому приношу свои извинения, если на этот вопрос уже отвечали раньше.
Комментарии:
1. Создайте
App.config
web.config
файл или в проекте API и добавьте в него строки подключения, пожалуйста, обратитесь к этому docs.microsoft.com/en-us/visualstudio/ide/…2. Я тоже это видел. Можно ли это добавить в основной проект? Нужно ли мне удалять appsettings.json?
3. Пожалуйста, покажите код, в котором вы получили ошибку.
4. app.config и web.config-это платформа dotnet, а не ядро dotnet.
5. Да, это совершенно нормально для добавления
app.config
файла, и вы не должны удалять файл appsettings.json. Кроме того, я рекомендую добавить библиотеку классов .net core вместо библиотеки .net framework
Ответ №1:
Вам нужно полностью отказаться от вашего понимания настроек конфигурации в рамках dot-net.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0
Обратите внимание на значение URL-адреса.
базовая конфигурация ядра aspnet
В DotNet-ядре: Настоятельно рекомендую создать объект первого класса. (конфигурация-держатель значения-poco)
И в ваших регистрациях Ioc введите poco держателя значения конфигурации в Ioc (он же «коллекция услуг» в dn-core).
А затем конструктор введет ваши настройки в держатель poco.
В соответствии со статьей.
Json «раздел»
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
Первоклассная конфигурация-держатель значения-poco.
public class PositionOptions
{
public const string Position = "Position";
public string Title { get; set; }
public string Name { get; set; }
}
Регистрация МоК.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<PositionOptions>(Configuration.GetSection(
PositionOptions.Position));
}
Инъекция Конструктора:
public class Test2Model : PageModel
{
private readonly PositionOptions _options;
public Test2Model(IOptions<PositionOptions> options)
{
_options = options.Value;
}
public ContentResult OnGet()
{
return Content($"Title: {_options.Title} n"
$"Name: {_options.Name}");
}
}
и теперь вы можете воспользоваться встроенными опциями «частота обновления» для того, как они обрабатываются.
https://medium.com/@kmar.ayush/eli5-ioptions-vs-ioptionssnaphot-vs-ioptionsmonitor-fab1d7e26a75
IOptions против IOptionsSnaphot против IOptionsМонитор