Вот базовая c do tnet основная командная строка exe
Обратите внимание, это небольшая реализация того, что описано в этой статье: https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/ConsoleOne
типичные настройки приложения. json содержимое
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/ConsoleOne/appsettings.json
{
"ConnectionStrings": {
"MyConnectionString": "Data Source=someServer\someInstance,1433;Database=master;User Id=sa;Password=Password1#;"
},
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*"
}
этот верхний уровень имеет и определяет эти значения. в моем примере «ConsoleOne» - это верхний уровень.
У меня также есть уровни BAL и DAL.
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/Bal
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/Dal
в моем примере используется Dapper, и он вылавливает строку подключения
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/Dal/EmployeeDataLayer.cs
public class EmployeeDataLayer : IEmployeeDataLayer
{
private readonly Microsoft.Extensions.Configuration.IConfiguration config;
public EmployeeDataLayer(Microsoft.Extensions.Configuration.IConfiguration config)
{
this.config = config;
}
public IDbConnection Connection
{
get
{
string connectionString = this.config.GetConnectionString("MyConnectionString");
return new SqlConnection(connectionString);
}
}
public async Task<Employee> GetByID(int id)
{
using (IDbConnection conn = this.Connection)
{
string sql = "SELECT ID, FirstName, LastName, DateOfBirth FROM Employee WHERE ID = @ID";
sql = "SELECT TOP 1 id as ID, 'FName' + name as FirstName, 'LName' + name as LastName, crdate as DateOfBirth FROM sysobjects order by id";
conn.Open();
var result = await conn.QueryAsync<Employee>(sql, new { ID = id });
return result.FirstOrDefault();
}
}
public async Task<ICollection<Employee>> GetByDateOfBirth(DateTime dateOfBirth)
{
using (IDbConnection conn = this.Connection)
{
string sql = "SELECT ID, FirstName, LastName, DateOfBirth FROM Employee WHERE DateOfBirth = @DateOfBirth";
sql = "SELECT TOP 3 id as ID, 'FName' + name as FirstName, 'LName' + name as LastName, crdate as DateOfBirth FROM sysobjects order by id";
conn.Open();
var result = await conn.QueryAsync<Employee>(sql, new { DateOfBirth = dateOfBirth });
return result.ToList();
}
}
}
(Примечание. мой код DAL, приведенный выше, не попадает в реальные серверные таблицы, это простая демонстрация, которую я сделал)
Но вернемся к конфигурации:
Я выполнил sh это, "вставив" объект конфигурации в класс (см. конструктор)
С do tnet -core вы обычно используете встроенный IoC / DI
Вы можете увидеть это здесь:
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/ConsoleOne/Program.cs
private static IServiceProvider BuildDi(IConfiguration config)
{
string connectionString = config.GetConnectionString("MyConnectionString");
return new ServiceCollection()
.AddSingleton<IEmployeeManager, EmployeeManager>()
.AddTransient<IEmployeeDataLayer, EmployeeDataLayer>()
.AddLogging(loggingBuilder =>
{
// configure Logging with NLog
loggingBuilder.ClearProviders();
loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
loggingBuilder.AddNLog(config);
})
.AddSingleton<IConfiguration>(config)
.BuildServiceProvider();
}