. net 5 vNext用参数解析依赖关系
本文关键字:依赖 关系 参数 vNext net | 更新日期: 2023-09-27 18:03:15
我已经能够使用vNext DI解决无参数构造函数的依赖关系。
但是当我试图为我的一个依赖项指定参数时,它给出了运行时错误:
构造函数:系统。无法解析服务类型的系统。试图激活命名空间时,字符串'。MyService '
public MyService(string name)
{
// initialize
}
用法:
private readonly IMyService _myService;
public Consumer(IMyService myService)
{
// initialize
_myService = myService;
}
我更新了这个依赖项注册,添加:
services.AddInstance(new MyService("Hello"));
只有当我更新Consumer类构造函数参数为使用类型MyService
时才有效我的初始注册是:
services.AddTransient<IMyService, MyService>(); // Todo: configure constructor injection
我真的想在这个过程中使用接口而不是具体的类。我怎样才能让它工作?
只要显式指定服务的类型就可以了:
services.AddInstance<IMyService>(new MyService("Hello"));
编译器通常会推断出泛型形参类型,但您始终可以显式指定泛型类型参数。
另一件要考虑的事情虽然没有太多的文档,但不是在构造函数中使用字符串,而是使用IOptions类并将字符串作为options的属性
http://shazwazza.com/post/using-aspnet5-optionsmodel/然后如果需要的话,你可以在不改变构造函数的情况下添加属性传入
还有另一种方法,您可以添加配置类:
public class MyServiceConfig
{
public MyServiceConfig(string name)
{
// initialize
}
}
public class MyService
{
public MyService(MyServiceConfig myServiceConfig)
{
// initialize
}
}
services.AddInstance(new MyServiceConfig("Hello"));
services.AddTransient<IMyService, MyService>();