所以我用這個解決方案碰上了,被接受的答案啓發:
的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
{
"SomeConfigItem": {
"Token": "8201342s223u2uj328",
"BaseUrl": "http://localhost:5000"
}
}
個
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();
}
什麼是你想實現什麼?一個可以提供網頁的控制檯應用程序?是的,這將是一個「自包含的asp.net核心應用程序」,並且有幾個例子可用,例如http://druss.co/2016/08/deploy-and-run-net-core-application-without-installed-runtime-self-contained-applications/ –
@ArashMotamedi我不想託管一個ASP.NET應用程序。我想有一個很好的舊控制檯應用程序來啓動我的類庫項目。我認爲我會免費獲得依賴注入等。 – Daniel
明白了。但是,是的,你的方法有點倒退。請記住,所有.net核心應用程序都由獨立的庫組成,您可以自由地引用任何類型的項目的這些庫。事實上,一個Asp.net核心應用程序預先配置爲引用大量這些庫並公開一個http端點。但如果它是依賴注入,您需要爲您的控制檯應用程序,只需參考適當的庫。這裏有一個指導:http://andrewlock.net/using-dependency-injection-in-a-net-core-console-application/ –