具有构造函数链接的依赖项注入



目前我有一个简单的通用抽象类,构造函数中有一个服务参数,通过依赖注入来解决。

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,但这似乎不对,因为FooCommandHandlerIAuditService无关。这超出了它的范围。

这有可能实现吗?

如果IAuditServiceFooCommandHandler作用域之外,则创建将具有该IAuditServiceCosmosCommandHandler类的子级。那个孩子也可能是抽象的阶级。此外,您可以为CosmosCommandHandler类创建额外的重载构造函数,而FooCommandHandler类不需要使用它。但这也打破了继承的概念,因为FooCommandHandler类与IAuditService无关。

最新更新