嵌套接口(空)依赖项注册



我有一个空的父接口,它的唯一目的是实现另外两个子接口。通过这种方式,我可以将构造函数参数的数量减少到可接受的数量。问题是我不知道如何在容器中注册这个依赖项,因为没有父接口的实现。存在子服务的条目,但从属服务此时无法找到两个子服务所需的服务依赖项。

services.AddScoped<IServiceChild1, IServiceChild1>();
services.AddScoped<IServiceChild2, IServiceChild2>();
// how to register IServiceParent
public interface IServiceParent: IServiceChild1, IServiceChild2
{
} 

将其改为类:

public class ServiceParentServices
{
public IServiceChild1 Service1 { get; }
public IServiceChild2 Service2 { get; }
public class ServiceParentServices(IServiceChild1 service1, IServiceChild2 service2)
{
Service1 = service1;
Service2 = service2;
}
}

将此类注册到ServiceCollection,当您想要使用它时,只需将ServiceParentServices注入构造函数

public class ServiceParent
{
private ServiceParentServices _services;
public ServiceParent(ServiceParentServices services)
{
_services = services;
}
}

作为替代方案,您也可以注入IServiceProvider,但这更像是ServiceLocator反模式。

最新更新