. 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

我真的想在这个过程中使用接口而不是具体的类。我怎样才能让它工作?

. net 5 vNext用参数解析依赖关系

只要显式指定服务的类型就可以了:

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>();