【发布时间】:2020-11-30 12:22:53
【问题描述】:
var fileName = string.Format(@"{0}\{1}\{2}.dll", Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)),"ProviderDLLS", $"UtilityPayments.Providers.TestProvider");
if (!File.Exists(fileName)) return null;
AssemblyName an = AssemblyName.GetAssemblyName(fileName);
Assembly assembly = Assembly.LoadFile(fileName);
Type objectType = assembly.GetType("UtilityPayments.Providers.TestProvider.Class1");
IProviderProcessor remoteAssembly = (IProviderProcessor)Activator.CreateInstance(objectType);
return await remoteAssembly.GetProviderData();
我调用类方法,它使用反射实现IProviderProcessor 接口。
如果我在 Class1 类中声明一个构造函数并使用 DI 添加接口,我会收到此错误:
System.MissingMethodException:未定义无参数构造函数 对于“UtilityPayments.Providers.TestProvider.Class1”类型。在 System.RuntimeType.CreateInstanceDefaultCtorSlow(布尔 publicOnly, Boolean wrapExceptions, Boolean fillCache) 在 System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly, 布尔型 skipCheckThis、布尔型 fillCache、布尔型 wrapExceptions)
在 System.Activator.CreateInstance(类型类型,布尔非公共, Boolean wrapExceptions)
Class1构造函数:
public class Class1: IProviderProcessor
{
private readonly IProviderService _providerService;
public Class1(IProviderService providerService)
{
_providerService = providerService;
}
}
如果我想在构造函数中注入接口,如何使用反射调用Class1 方法?
如果我删除构造函数,代码可以正常工作,但我需要使用应用程序 Class1 中的其他功能,这些功能是使用依赖注入实现的。
【问题讨论】:
-
您的代码根本没有引用容器。您的代码如何知道要为您的班级提供什么 IServiceProvider?
标签: c# .net-core reflection dependency-injection