gpt4 book ai didi

c# - 使用依赖注入(inject)通过构造函数反射调用c#类方法

转载 作者:行者123 更新时间:2023-12-04 09:11:16 25 4
gpt4 key购买 nike

 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 接口(interface)。如果我在 Class1 类中声明一个构造函数并使用 DI 添加接口(interface),我会收到此错误:

System.MissingMethodException: No parameterless constructor definedfor type 'UtilityPayments.Providers.TestProvider.Class1'. atSystem.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly,Boolean wrapExceptions, Boolean fillCache) atSystem.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic,Boolean wrapExceptions)

Class1 构造函数:

public class Class1: IProviderProcessor
{
private readonly IProviderService _providerService;

public Class1(IProviderService providerService)
{
_providerService = providerService;
}

}

如果我想在构造函数中注入(inject)接口(interface),如何使用反射调用 Class1 方法?如果我删除构造函数,代码可以正常工作,但我需要使用 Class1 中的应用程序其他功能,这些功能是使用依赖注入(inject)实现的。

最佳答案

我必须解决这个近乎精确的问题。我发现最简单但也许不是最好的方法是使用 ServiceProvider。

在任何您想运行代码的类中添加一个 ServiceProvider:

private protected IServiceProvider _serviceProvider;

你可以正常注入(inject)它:

public YourClass(IServiceProvider 服务){_serviceProvider = 服务;}

然后替换:

IProviderProcessor remoteAssembly = (IProviderProcessor)Activator.CreateInstance(objectType);

与:

IProviderProcessor remoteAssembly = (IProviderProcessor)_serviceProvider.GetRequiredService(objectType);

关于c# - 使用依赖注入(inject)通过构造函数反射调用c#类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63347954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com