- Если вы хотите разделить конфигурацию только между проектом lib и проектом веб-сайта, вам лучше использовать внедрение зависимостей для этого.
Проект lib не должен заботиться о расположении файла конфигурации. Каждый раз, когда нам нужна конфигурация в нашем проекте lib, скажем, ConnectionString
, мы должны просто попросить ее.
Сначала нужно добавить ссылку на пакет в проект lib:
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.1" />
А затем введите IConfiguration
, когда нам это нужно. Например, у нас должен быть IConfiguration
объект, внедренный в DataLib
:
namespace DataLib
{
public class DataLib: IDataRepo
{
private readonly IConfiguration _configuration ;
public DataLib(IConfiguration config ){
this._configuration=config;
}
public string ConnectionString{
get{
return _configuration.GetConnectionString("DefaultConnection");
}
}
}
}
IConfiguration
не имеет значения, где находится файл конфигурации или какие аргументы передаются командной строкой при запуске. На самом деле, это ни о чем не заботится. DataLib просто использует простое POCO.
Когда нам нужен класс lib в основном проекте, мы можем просто добавить службу в контейнер DI следующим образом:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<DataLib.DataLib>(); // if you want to use DbContext , just use AddScoped<TService>()
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Это все, что нам нужно сделать. appsettings.json
и другие конфигурации будут встроены в экземпляр IConfiguration
, а затем автоматически добавлены в проект lib.
- Есть и другие решения, такие как использование связанных файлов и т. Д. Тем не менее, приведенный выше подход делает DataLib простым POCO. Это замечательно . Поскольку библиотека всегда используется главным проектом, нам не нужно заботиться о конфигурации или о том, как она создается. Основной проект позаботится об этом.