我正在尝试在.NET Core控制台应用程序中使用依赖项注入。 关于它的文章很多,但是找不到解决我问题的文章。 我正在尝试使用来自aspnet核心Web应用程序的原始服务,这就是为什么我拥有WebHost。
我的主要问题是创建自己类的实例,所有依赖项似乎都起作用,并且我的控制台应用程序启动了。
我的程序类中有以下代码:
static void Main(string[] args)
{
var host = WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => options.AddServerHeader = false)
.UseStartup<Startup>()
.Build();
var services = new ServiceCollection().AddLogging();
var container = new Container();
var serviceProvider = container.GetInstance<IServiceProvider>();
由于以下错误,该代码将无法编译: “容器”不包含“ GetInstance”的定义
如何创建具有此实现的自定义类App的实例:
public class App
{
private readonly IProductService _productService;
public App(IProductService productService)
{
_productService = productService;
}
}
答案 0 :(得分:1)
我不知道您的设置中是什么“容器”,但是通常您可以通过在ServiceCollection
上调用BuildServiceProvider
来创建服务提供商。
var provider = services.BuildServiceProvider();
var instance = provider.GetService<App>();
尽管如此,您首先需要在服务集合中同时注册App
和所需的IProductService
。
答案 1 :(得分:1)
在这种情况下,您甚至不需要创建自己的ServiceCollection
或ServiceProvider
-您可以使用已经拥有的IWebHost
的{{3}}属性:
var app = host.Services.GetService<App>();
WebHost.CreateDefaultBuilder
已经添加了日志记录服务,因此也不需要这样做。
注意:我假设您已经在App
中注册了IProductService
和Startup.ConfigureServices
类型。