.NET 5 vNext使用参数解析依赖项

时间:2015-07-16 14:21:23

标签: c# asp.net dependency-injection visual-studio-2015 asp.net-core

我已经能够使用 vNext DI 解决无参数构造函数的依赖关系。

但是当我尝试为其中一个依赖项指定参数时,它会给出运行时错误:

  

System.InvalidOperationException无法解析类型的服务   尝试激活“Namespace.MyService”时的“System.String”

构造

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

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

3 个答案:

答案 0 :(得分:5)

这与明确指定服务类型一样简单:

services.AddInstance<IMyService>(new MyService("Hello"));

编译器通常会推断泛型参数类型,但您始终可以显式指定泛型类型参数。

答案 1 :(得分:1)

另外要考虑的事情虽然还没有太多文档,但是不是在构造函数中使用字符串,而是使用IOptions类并将字符串作为选项的属性

old Squarespace site

然后,如果需要,您可以添加要传入的属性而不更改构造函数

答案 2 :(得分:1)

还有另一种方法,你可以添加配置类:

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