您好我有一个由多个类实现的接口。
public interface IHuman
{
void Talk();
}
public class AdultHuman
{
public void Talk()
{
Console.Writeline("Hi");
}
}
public class BabyHuman
{
public void Talk()
{
Console.Writeline("Babble");
}
}
public enum HumanEnums
{
Adult,
Baby
}
目前在我的创业公司添加我有
services.AddSingleton<AdultHuman>();
services.AddSingleton<BabyHuman>();
我们不断添加IHumans的不同实现,所以我希望我的启动添加为动态添加单圈,循环通过HumanEnums的值,所以它看起来像这样
var enumTypes = Enum.GetValues(typeof(ActionTypes));
foreach(var enum in enumTypes)
{
var type = typeof(IHuman);
// namespace + name of class i.e MyProgram.Humans.BabyHuman
var typeName = $"{type.Namespace}.{action}Human";
var t = Type.GetType(typeName, true);
services.AddSingleton< --something here-- >();
}
我将如何实现这一目标?
P.S。另外,如果不是循环遍历枚举,我可以找到IHuman的所有实现并循环遍历它。
答案 0 :(得分:1)
谢谢你们,我能帮你解决它!我没有意识到你可以添加单一类型而不是类。所以我用了AddSingleton(typeof(Adult));而不是AddSingleton();
var humanTypes = typeof(IHuman).
GetTypeInfo().Assembly.DefinedTypes
.Where(t => typeof(IHuman).GetTypeInfo().IsAssignableFrom(t.AsType()) && t.IsClass)
.Select(p => p.AsType());
foreach(var humanType in humanTypes )
{
services.AddSingleton(humanType);
}