目前我有一个简单的通用抽象类,构造函数中有一个服务参数,通过依赖注入来解决。
public abstract class CosmosCommandHandler<T>
{
protected readonly ICosmosStore<T> _cosmosStore;
protected CosmosCommandHandler(ICosmosStore<T> cosmosStore)
{
_cosmosStore = cosmosStore;
}
}
以及继承自的一些具体类
public class FooCommandHandler : CosmosCommandHandler<Foo>
{
private readonly IFooService _fooService;
public FooCommandHandler(ICosmosStore<Foo> cosmosStore, IFooService fooService)
: base(cosmosStore)
{
_fooService = fooService;
}
}
这一切都很好,但我想向抽象类添加一个新的服务,并用DI来解决它。我的想法是,我应该使用构造函数链接,但它不起作用。像这样的东西。
public abstract class CosmosCommandHandler<T>
{
private readonly IAuditService _auditService;
protected readonly ICosmosStore<T> _cosmosStore;
private CosmosCommandHandler(ICosmosStore<T> cosmosStore, IAuditService auditService)
{
_cosmosStore = cosmosStore;
_auditService = auditService;
}
protected CosmosCommandHandler(ICosmosStore<T> cosmosStore)
: this(cosmosStore, IAuditService auditService)
{
}
}
很明显,我可以像ICosmosStore
一样从FooCommandHandler
传递IAuditService
,但这似乎不对,因为FooCommandHandler
与IAuditService
无关。这超出了它的范围。
这有可能实现吗?
如果IAuditService
在FooCommandHandler
作用域之外,则创建将具有该IAuditService
的CosmosCommandHandler
类的子级。那个孩子也可能是抽象的阶级。此外,您可以为CosmosCommandHandler
类创建额外的重载构造函数,而FooCommandHandler
类不需要使用它。但这也打破了继承的概念,因为FooCommandHandler
类与IAuditService
无关。