使用结构图,我们可以注册如下接口:
Scan(x =>
{
x.AssemblyContainingType<Startup>();
x.Assembly("Api");
x.LookForRegistries();
x.AddAllTypesOf<Profile>();
x.WithDefaultConventions();
});
如果我有接口并且多个具体实现使用该接口,IService,ServiceA,ServiceB,ServiceC,我如何使用Microsoft DI做到这一点,或者我必须写下addtransient 3次?
策略模式相同:
public class ServiceStrategy : IServiceStrategy
{
private readonly List<IService> _services;
public ServiceStrategy(List<IService> services)
{
this._services= services;
}
public string GetProcedure(Enum enum, EnumTwo enum2)
{
return this._managers.FirstOrDefault(x => x.Type == enum)
?.GetProcedure(enum2);
}
}
如何在此处注册策略?
Microsoft.Extensions.DependencyInjection缺少任何自动注册功能,因此您有3个选项:
- 显式注册每个组件,方法是对每个组件进行一次
AddTransient
调用 - 通过反映程序集、筛选出正确的类型并注册它们来自己编写自动注册。根据您的要求,复杂性可能会有所不同。
- 切换到更成熟、功能更强大的 DI 容器。