首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在 ASP.NET Core 中创建一个依赖注入的作用域,并在该作用域内获取服务的实例?

如何在 ASP.NET Core 中创建一个依赖注入的作用域,并在该作用域内获取服务的实例?

提问于 2024-07-18 04:46:00
回答 0关注 0查看 8

1. 配置服务

首先,在 Startup.cs 文件中配置你的服务。假设你有一个 MyService 类和一个 IMyService 接口:

代码语言:javascript
复制
public interface IMyService
{
    void DoWork();
}

public class MyService : IMyService
{
    public void DoWork()
    {
        // 实现你的逻辑
    }
}

ConfigureServices 方法中注册这个服务:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddScoped<IMyService, MyService>();
}

2. 在类内部创建依赖注入作用域

假设你有一个类 MyClass,你希望在这个类的内部创建一个依赖注入的作用域,并获取 IMyService 的实例:

代码语言:javascript
复制
public class MyClass
{
    private readonly IServiceProvider _serviceProvider;

    public MyClass(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public void MyMethod()
    {
        using (var scope = _serviceProvider.CreateScope())
        {
            var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
            myService.DoWork();
        }
    }
}

3. 使用 MyClass

你可以在控制器或其他服务中使用 MyClass

代码语言:javascript
复制
public class HomeController : Controller
{
    private readonly MyClass _myClass;

    public HomeController(MyClass myClass)
    {
        _myClass = myClass;
    }

    public IActionResult Index()
    {
        _myClass.MyMethod();
        return View();
    }
}

4. 注册 MyClass

确保在 Startup.cs 中注册 MyClass

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddScoped<IMyService, MyService>();
    services.AddTransient<MyClass>(); // 或者 AddScoped 或 AddSingleton,根据你的需求
}

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档