Chr*_*ord 4 c# dependency-injection asp.net-core asp.net-core-webapi
对 Asp.Net 非常缺乏经验,我有一个类,我希望能够在某些控制器中实例化和使用该类,但我不确定如何为我的构造函数获取参数。
我有一个数据类型,我想将它用作一个名为的服务Watcher,它有一个构造函数签名,Watcher(string _path, bool _DeletionPolicy = false)它提供了一个观看文件的路径,并设置了默认的删除策略。(错误是过期后什么都不做,文件在 90 天后“过期”。)
我知道我需要在 MVC 中注册服务ConfigureServices(),但是我将如何实例化这两个(或一个必需的)参数?
添加服务时使用工厂委托
例如
services.AddTransient<Watcher>(sp => new Watcher("some path here", otherVariable));
Run Code Online (Sandbox Code Playgroud)
从那里使用服务作为依赖项时,
通过构造函数注入
private readonly Watcher watcher;
//ctor
public MyController(Watcher watcher) {
this.watcher = watcher;
//...
}
Run Code Online (Sandbox Code Playgroud)
或直接在一个动作中
public IActionResult MyAction(int arg, [FromServices]Watcher watcher) {
}
Run Code Online (Sandbox Code Playgroud)
当激活类进行注入时,容器将使用该委托。
简而言之,您必须执行以下操作:
编写实现 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 Startup.cs 的 ConfigureServices 方法中将 IWatcher 注册到 Watcher 类,如下所示:
services.AddTransient<IWatcher>(w => new Watcher("some path", deletionPolicy));
Run Code Online (Sandbox Code Playgroud)
最后,在需要 Watcher 类的每个控制器中,在构造函数中使用 IWatcher 接口。当您将 IWatcher 添加到控制器构造函数时,依赖项注入将实例化您在 ConfigureServices 方法中定义的 Watcher。之后它会将其注入构造函数并将其分配给一个私有变量。然后,您可以在需要的方法中在控制器中使用它。
public class SomeController : Controller
{
private readonly IWatcher _watcher;
public SomeController(IWatcher watcher)
{
_watcher = watcher;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |