我想通过 .NET Core 中的抽象工厂访问特定接口的多个实现。根据提供的枚举,应返回正确的实现。这是我当前的代码:
public enum ServiceInstanceEnum { SampleE, SampleD }
// MyServiceFactory
public ISampleC CreateService(ServiceInstanceEnum serviceType)
{
switch (serviceType)
{
case ServiceInstanceEnum.SampleE: return new SampleE();
case ServiceInstanceEnum.SampleD: return new SampleD();
default: throw new Exception($" The service is not exist...");
}
}
我在 Startup.cs 上的服务注入
services.AddScoped<IMyServiceFactory, MyServiceFactory>();
services.AddScoped<ISampleC, SampleD>();
services.AddScoped<ISampleC, SampleE>();
控制器
private readonly ISampleC _sampleC;
public WeatherForecastController(
ILogger<WeatherForecastController> logger,
IMyServiceFactory myServiceFactory)
{
_logger = logger;
_sampleC = myServiceFactory.CreateService(ServiceInstanceEnum.SampleD);
}
问题是我当前的 MyServiceFactory 实现手动创建服务,而我希望它们由 DI 容器创建和管理。
让您的
MyServiceFactory
取决于 IServiceProvider
:
public class MyServiceFactory(IServiceProvider container) : IMyServiceFactory
{
public ISampleC CreateService(ServiceInstanceEnum serviceType)
{
switch (serviceType)
{
case ServiceInstanceEnum.SampleE:
return container.GetRequiredInstance<SampleE>();
case ServiceInstanceEnum.SampleD:
return container.GetRequiredInstance<SampleD>();
default: throw new Exception($" The service is not exist...");
}
}
}
services.AddScoped<IMyServiceFactory, MyServiceFactory>();
services.AddScoped<SampleD>();
services.AddScoped<SampleE>();