我一定是错过了。net核心DI的东西,我需要你的帮助。我已经成功地为我的服务类,我的Azure客户端类等使用了DI,但我不明白如何让它与我的基类(只代表基本对象的类)一起工作。
假设我有一个非常简单的类,比如
public class Person{
private readonly Ilogger<Person> logger;
public string name {get; set;}
public string lastname {get; set;}
public void LogYourName(){
logger.logInformation(this.name);
}
}
同样,假设我有一个HTTP rest API或另一个服务,返回Person
的实例作为结果。
不使用DI如何在Person
类中启动ILogger
?
微软依赖注入框架要求你通过构造函数来实现。你需要这样做:
public class Person
{
private readonly ILogger logger;
public Person(ILogger logger) => this.logger = logger;
// Additional Code Here
}
当对象被构造时,框架将为你注入logger实例。然而,根据你上面的问题-为了避免依赖注入需要做:
var logger = services.GetService<ILogger>();
var person = new Person(logger);
services
来源于IServiceProvider
。我需要了解如何实例化IServiceCollection
并填充IServiceProvider
。这将允许你在仍然使用微软依赖注入框架的情况下,手动将接口放入类中。