[英].Net Core DI Does Not Work For Me And Throws Null Reference Exception
我是 .net 核心的新手,需要您的帮助。 下面是我的实现不起作用
主程序
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging()
.AddTransient<ICustomLogger, TextWriterLogger>()
.BuildServiceProvider();
StartAsyncTest(args);
}
public async static void StartAsyncTest(string[] args)
{
HttpAsyncTest.SetupCommand dto = new HttpAsyncTest.SetupCommand();
HttpAsyncTest.ExecuteCommand executeCommand = new HttpAsyncTest.ExecuteCommand();
var test = executeCommand.ExecuteAsync(new HttpAsyncTest(dto));
await test;
}
我的执行命令在另一个名为 AsyncTest.Domain 的 .Net Core Class 库中
public partial class HttpAsyncTest : IValidEntity, IBuisnessEntity
{
public HttpAsyncTest(SetupCommand dto)
{
HttpRequestContainers = new List<HttpAsyncRequestContainer>();
this.Setup(dto);
}
private ICustomLogger _logger;
public HttpAsyncTest(ICustomLogger logger)
{
_logger = logger;
}
async public Task ExecuteAsync(ExecuteCommand dto)
{
_logger.Log // throws null reference exception
}
}
ILogger 接口位于域 class 库中,其实现位于基础结构库中,并且该域不按照 DDD 原则引用基础结构。
上面我做错了什么以及如何修复 null 引用异常。
抱歉,我是.net核心和.net核心DI的新手,需要您的指导。
因为您没有使用 DI Container 创建实例,所以_logger
字段将指向NULL
中的HttpAsyncTest
,并且您没有从代码中分配ICustomLogger
字段。
public partial class HttpAsyncTest : IValidEntity, IBuisnessEntity
{
public HttpAsyncTest(SetupCommand dto,ICustomLogger logger)
{
HttpRequestContainers = new List<HttpAsyncRequestContainer>();
_logger = logger;
this.Setup(dto);
}
private ICustomLogger _logger;
async public Task ExecuteAsync(ExecuteCommand dto)
{
_logger.Log;
}
}
在Main
方法中,您可以通过serviceProvider
DI Container object 调用,您可以从该 Container 获取HttpAsyncTest
object,这将在您注册时创建一个 object。
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging()
.AddTransient<ICustomLogger, TextWriterLogger>()
.AddTransient<SetupCommand>()
.AddTransient<HttpAsyncTest>()
.BuildServiceProvider();
}
public async static void StartAsyncTest(ServiceProvider serviceProvider)
{
HttpAsyncTest.ExecuteCommand executeCommand = new HttpAsyncTest.ExecuteCommand();
var test = executeCommand.ExecuteAsync(serviceProvider.GetService<HttpAsyncTest>());
await test;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.