startup.cs大概是这么实现的.
用抽象类或者接口,来激活符合该定义的对象类型进行实例化.
using System.Reflection;
// See https://aka.ms/new-console-template for more information
using System;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
static void Main(string[] args)
{
// Console.WriteLine("Hello World!");
Console.WriteLine("Hello, World!");
//Apps z = new Apps();
var tlist = Assembly.GetAssembly(typeof(Apps)).GetTypes()
.Where(t => t.IsClass && !t.IsInterface && t.GetInterfaces().Contains((typeof(iApps)))).ToList();
foreach (var o in tlist)
{
iApps m = (iApps)Activator.CreateInstance(o, false);
//m.Gocode();
m.GetCode();
}
}
}
}
interface iApps
{
public void GetCode();
}
public abstract class Apps
{
protected Apps()
{
}
public abstract void Gocode();
// {
// Console.WriteLine("gocode");
// }
public void Init()
{
Gocode();
}
}
public class App1 : Apps,iApps
{
public void GetCode()
{
System.Console.WriteLine("app1 getcode");
// throw new NotImplementedException();
}
public override void Gocode() =>
//throw new NotImplementedException();
Console.WriteLine("app1");
}
public class App2 : Apps,iApps
{
public void GetCode()
{
System.Console.WriteLine("app2 getcode");
// throw new NotImplementedException();
}
public override void Gocode()
{
System.Console.WriteLine("app2");
// throw new NotImplementedException();
}
}
public class App3 : Apps,iApps
{
public void GetCode()
{
System.Console.WriteLine("app3 getcode");
// throw new NotImplementedException();
}
public override void Gocode()
{
System.Console.WriteLine("App3");
// throw new NotImplementedException();
}
}

浙公网安备 33010602011771号