作者:U友50141126 | 来源:互联网 | 2022-12-01 14:17
在我的asp.net核心应用程序中,我具有依赖项类,这些依赖项类注入了几乎所有服务。因此,我想构建一个基础服务类来获取对属性的这些依赖关系,并且我的服务继承该基础服务类。
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);
}
}
因此,对于给定的代码,它警告我使用提供的参数调用基本构造函数,但是它们是将在运行时注入的参数,我不希望这样做。如果添加无参数构造函数,它将不会调用我需要的参数化构造函数。
我不想在继承的服务中调用或定义任何在基本服务(Foo
和Bar
)中注入的类,该怎么办?
顺便说一句Foo
,如果Bar
类的寿命很重要,则将类作为单例注入到容器中。
1> ibubi..:
这就是我正在寻找的/sf/ask/17360801/
我按照上面的说明修改了我的控制器库代码。
对于我在服务中提出的问题;由于它们没有HttpContext
像内置Controller
基类那样使用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();
Bar = provider.GetService();
}
}
public class Service : BaseService
{
public Service(IOtherDependency otherDependency, IServiceProvider provider) : base(provider) { }
public void Method()
{
var value = Bar.value;
Foo.Do(value);
}
}