繁体   English   中英

在ASP.net Core中将对象实例化为服务

[英]Instantiating an Object as a service in ASP.net Core

非常缺乏Asp.Net,我有一个类,我希望能够在一些控制器中实例化和使用,我不确定如何获取我的构造函数的参数。

我有一个数据类型,我想将其用作名为Watcher的服务,它具有Watcher的构造函数签名Watcher(string _path, bool _DeletionPolicy = false)这提供了一个监视文件的路径,并设置了默认的删除策略。 (False在到期后无效,文件在90天后“过期”。)

我知道我需要在ConfigureServices()使用MVC注册服务,但是如何实例化这两个(或一个必需的)参数呢?

添加服务时使用工厂代理

例如

services.AddTransient<Watcher>(sp => new Watcher("some path here", otherVariable));

从那里使用服务作为依赖,

通过构造函数注入

private readonly Watcher watcher;

//ctor
public MyController(Watcher watcher) {
    this.watcher = watcher;
    //...
}

或直接在行动中

public IActionResult MyAction(int arg, [FromServices]Watcher watcher) {

}

在激活注入类时,容器将使用该委托。

简而言之,你将不得不做这样的事情:

编写实现IWatcher接口的Watcher类:

public class Watcher : IWatcher
{
    private readonly string _path;
    private readonly bool _deletionPolicy;

    public Watcher(string path, bool deletionPolicy = false)
    {
        _path = path;
        _deletionPolicy = deletionPolicy;
    }
}

然后在Startup.cs中的ConfigureServices方法中将IWatcher注册到Watcher类,如下所示:

services.AddTransient<IWatcher>(w => new Watcher("some path", deletionPolicy));

Finall,在您需要Watcher类的每个控制器中,在构造函数中使用IWatcher接口。 将IWatcher添加到控制器构造函数时,依赖项注入将实例化Watcher,就像在ConfigureServices方法中定义它一样。 之后,它将在构造函数中注入它并将其分配给私有变量。 然后,您可以在需要的方法中在控制器中使用它。

public class SomeController : Controller
{
    private readonly IWatcher _watcher;

    public SomeController(IWatcher watcher)
    {
        _watcher = watcher;
    }   
}   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM