换一种方式
时间: 2024-02-27 15:55:11 浏览: 37
除了使用反射之外,还可以使用依赖注入容器来获取实现给定接口的所有类的列表。下面是一个示例:
```csharp
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
interface IMyInterface
{
void MyMethod();
}
class MyClass1 : IMyInterface
{
public void MyMethod()
{
Console.WriteLine("MyClass1.MyMethod()");
}
}
class MyClass2 : IMyInterface
{
public void MyMethod()
{
Console.WriteLine("MyClass2.MyMethod()");
}
}
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddTransient<IMyInterface, MyClass1>();
services.AddTransient<IMyInterface, MyClass2>();
var serviceProvider = services.BuildServiceProvider();
var myClasses = serviceProvider.GetServices<IMyInterface>();
foreach (var myClass in myClasses)
{
myClass.MyMethod();
}
}
}
```
在这个例子中,我们定义了一个接口 `IMyInterface` 和两个实现该接口的类 `MyClass1` 和 `MyClass2`。然后,我们使用依赖注入容器来将这两个类注册为 `IMyInterface` 的实现。最后,我们使用容器来获取所有实现 `IMyInterface` 接口的类的列表,并调用它们的 `MyMethod` 方法。
注:需要引用 `Microsoft.Extensions.DependencyInjection` 命名空间。
阅读全文