C# 如何在没有依赖注入的情况下访问INodeServices
我想从我的c#运行一些节点代码C# 如何在没有依赖注入的情况下访问INodeServices,c#,dependency-injection,asp.net-core,C#,Dependency Injection,Asp.net Core,我想从我的c#运行一些节点代码Microsoft.AspNetCore.NodeServices似乎是完成这项工作的方法,但是示例都非常相似,都涉及到 services.AddNodeServices(); 在configure services函数中,然后DI将INodeServices的实现添加到控制器中。像这样 public class foo { private readonly INodeServices _nodeServices; public foo(IN
Microsoft.AspNetCore.NodeServices
似乎是完成这项工作的方法,但是示例都非常相似,都涉及到
services.AddNodeServices();
在configure services函数中,然后DI将INodeServices的实现添加到控制器中。像这样
public class foo
{
private readonly INodeServices _nodeServices;
public foo(INodeServices nodeServices)
{
_nodeServices = nodeServices;
}
}
当我在类库中而不是在webapi中使用它时,DI将如何工作?还有,我如何从单元测试调用该类,我可以向构造函数传递什么?我确信我遗漏了一些明显的东西。DI的概念是它可以用来解析对象图。也就是说,它不仅解析控制器类的依赖关系,还解析这些依赖关系的依赖关系、这些依赖关系的依赖关系等等 要在自己的库中使用
INodeServices
,只需引用,然后将其作为构造函数参数接受即可
public class MyServiceFromMyLibrary : IMyServiceFromMyLibrary
{
private readonly INodeServices nodeServices;
public MyServiceFromMyLibrary(INodeServices nodeServices)
{
this.nodeServices = nodeServices;
}
// ...
}
然后从WebAPI项目中引用您的库,并将您的服务注入控制器
public class FooController
{
private readonly IMyServiceFromMyLibrary myService;
public FooController(IMyServiceFromMyLibrary myService)
{
this.myService = myService;
}
}
DI负责将INodeServices
实例放入您的类中,前提是它已在您的中注册,如下所示
services.AddNodeServices();
services.AddTransient<IMyServiceFromMyLibrary, MyServiceFromMyLibrary>();
参考资料:
NodeServicesOptions
依赖于IServiceFactory
(使其成为服务定位器),而且它似乎还依赖于其他一些东西。底线是单元测试是简单的,但集成测试并不多。看见
var mock = new Mock<INodeServices>();
mock.Setup(ns => ns.InvokeAsync(It.IsAny<string>())).Returns(...);
var target = new MyServiceFromMyLibrary(mock.Object);
// .. Call a method on target and then assert the results