c# - asp.net 核心构造函数注入(inject)继承

标签 c# inheritance asp.net-core dependency-injection

在我的 asp.net 核心应用程序中,我有被注入(inject)到几乎所有服务的依赖类。所以我想构建一个基本服务类来获取这些属性的依赖项,我的服务继承这个基本服务类。

public abstract class BaseService
{
    protected Foo Foo { get; set; }
    protected Bar Bar { get; set; }

    public BaseService(Foo foo, Bar bar)
    {
        Foo = foo;
        Bar = bar;
    }
}
public class Service : BaseService
{
    public Service(IOtherDependency otherDependency) { }

    public void Method()
    {
        var value = Bar.value;
        Foo.Do(value);
    }
}

因此,对于给定的代码,它警告我使用提供的参数调用基本构造函数,但是它们是将在运行时注入(inject)的参数,我不想要它。如果我添加无参数构造函数,它不会调用我需要的参数化构造函数。

我不想在继承的服务中调用或定义任何注入(inject)基础服务(FooBar)的类,我该怎么做?

顺便说一句,FooBar 类作为单例注入(inject)到容器中,以防它们的生命周期很重要。

最佳答案

This正是我要找的。


我按照上面的帖子修改了我的 Controller 基础代码。

对于我在问题中提出的服务方面;因为他们不使用 HttpContext像内置的 Controller基类,我只注入(inject)IServiceProvider将类添加到我的 BaseService,因此无论我在所有服务中需要什么,我都可以通过 provider.GetService() 将其获取到属性中.

public abstract class BaseService
{
    protected Foo Foo { get; set; }
    protected Bar Bar { get; set; }

    public BaseService(IServiceProvider provider)
    {
        Foo = provider.GetService<Foo>();
        Bar = provider.GetService<Bar>();
    }
}
public class Service : BaseService, IService
{
    public Service(IOtherDependency otherDependency, IServiceProvider provider) : base(provider) { }

    public void Method()
    {
        var value = Bar.value;
        Foo.Do(value);
    }
}

public class SomeController : BaseController
{
    private readonly IService _service;

    public SomeController(IService service)
    {
        _service = service;
    }

    public IActionResult Index()
    {
        //call method
        _service.Method();
    }
}

关于c# - asp.net 核心构造函数注入(inject)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52982560/

相关文章:

c# - 具有 Azure Active Directory 的 Web 应用程序始终重定向到 '~/.auth/login/done' URL

c# - Azure 下载不完整

c# - XAML - 为什么数据绑定(bind) TwoWay 不适用于 .net 4.0 中组合框的文本属性?

c++ - 是否有可能有一个基类方法调用所有派生类的相同(但被覆盖的方法)?

asp.net - 我可以坚持使用 ASP.Net 并从 EF6 迁移到 EF Core 吗?

c# - 如何更改.Net core中的访问拒绝路由

c# - MVC 检查 View 中的模型是否有记录

java的同步关键字的C#版本?

c++ - 从相关类访问私有(private)成员数据

.net - 从 .Net 的 Type 类继承