, kabul edilen yanıt esinlenerek:
program.cs
public class Program
{
public static void Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
// Startup.cs finally :)
Startup startup = new Startup();
startup.ConfigureServices(services);
IServiceProvider serviceProvider = services.BuildServiceProvider();
//configure console logging
serviceProvider
.GetService<ILoggerFactory>()
.AddConsole(LogLevel.Debug);
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
logger.LogDebug("Logger is working!");
// Get Service and call method
var service = serviceProvider.GetService<IMyService>();
service.MyServiceMethod();
}
}
Startup.cs
public class Startup
{
IConfigurationRoot Configuration { get; }
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging();
services.AddSingleton<IConfigurationRoot>(Configuration);
services.AddSingleton<IMyService, MyService>();
}
}
appsettings.json İşte bir kılavuz
{
"SomeConfigItem": {
"Token": "8201342s223u2uj328",
"BaseUrl": "http://localhost:5000"
}
}
Eğer başarmak için çalışıyoruz ne
MyService.cs
public class MyService : IMyService
{
private readonly string _baseUrl;
private readonly string _token;
private readonly ILogger<MyService> _logger;
public MyService(ILoggerFactory loggerFactory, IConfigurationRoot config)
{
var baseUrl = config["SomeConfigItem:BaseUrl"];
var token = config["SomeConfigItem:Token"];
_baseUrl = baseUrl;
_token = token;
_logger = loggerFactory.CreateLogger<MyService>();
}
public async Task MyServiceMethod()
{
_logger.LogDebug(_baseUrl);
_logger.LogDebug(_token);
}
}
IMyService.cs
public interface IMyService
{
Task MyServiceMethod();
}
? Web sayfalarına hizmet edebilecek bir konsol uygulaması? Evet, "kendi kendine yeten bir asp.net çekirdek uygulaması" olurdu ve birkaç örnek var, örn. http://druss.co/2016/08/deploy-and-run-net-core-application-without-installed-runtime-self-contained-applications/ –
@ArashMotamedi ASP.NET Uygulamasını barındırmak istemiyorum . Sınıf Kütüphane projemi başlatan eski bir Konsol Uygulamasına sahip olmak istiyorum. Ben Bağımlılık Enjeksiyon vb. Ücretsiz alacağını düşündüm. – Daniel
Anladım. Ama evet, yaklaşımın biraz geriye doğru. Tüm .net çekirdek uygulamalarının bağımsız kütüphanelerden oluştuğunu ve herhangi bir proje türü için bu kütüphanelerden herhangi birine başvurmaktan kesinlikle bağımsız olduğunu unutmayın. Sadece bir Asp.net çekirdek uygulamasının, bu kütüphanelerin çoğuna referans vermek ve bir http son noktasını ortaya çıkarmak için önceden yapılandırılmış olarak gelir. Ancak konsol uygulamanız için ihtiyacınız olan Bağımlılık Enjeksiyonu ise, sadece uygun kütüphaneye başvurmanız yeterlidir. İşte bir rehber: http://andrewlock.net/using-dependency-injection-in-a-net-core-console-application/ –