gpt4 book ai didi

c# - 值不能为空。参数名称 : type

转载 作者:行者123 更新时间:2023-11-30 16:50:17 25 4
gpt4 key购买 nike

在阅读并尝试了 stackExchange 上的答案后,我仍然在以下代码中得到一个空值:

    typeOfIMydServiceBase.Assembly
.GetExportedTypes()
.Where(exportedType => typeOfMydServiceBase != exportedType && typeOfMydServiceBase.IsAssignableFrom(exportedType))
.Select(mydServiceType => new
{
serviceType = mydServiceType,
interfaceType = mydServiceType.GetInterfaces().First(@interface => @interface != typeOfIMydServiceBase && typeOfIMydServiceBase.IsAssignableFrom(@interface))
})
.ToList()
.ForEach(registrationInfo => container.Register(registrationInfo.interfaceType, () =>
{
var method = serviceActivatorType
.GetMethod("GetService", serviceActivatorParams)
.MakeGenericMethod(new[] { registrationInfo.interfaceType });
var result = method.Invoke(new ServiceActivator(), null);

return result;
}, WebApiRequestLifestyleWithDisposal));

结果一直返回为 null,当我使用 Object[] {null} 或 Object[]{} 或 Object[]{null,null,etc} 时,我得到参数不匹配。

注意:这是我收到的上述代码的错误消息:

Line 156: .MakeGenericMethod(new[] { registrationInfo.interfaceType });

Line 157:

Line 158: var result = method.Invoke(new ServiceActivator(), null);

Line 159:

Line 160: return result;

有谁知道这里发生了什么以及我该如何解决????

{
public class ServiceActivator
{
public ServiceActivator();
public ServiceActivator(IServiceConfigurationReader configurationReader);

public T GetService<T>();
public T GetService<T>(string key);
}

与上述内容相关的还有所用服务的注册。见下文:

//Scan and register business servics
var typeOfIMydServiceBase = typeof(IMydServiceBase);
var typeOfMydServiceBase = typeof(MydServiceBase);
var serviceActivatorType = typeof(ServiceActivator);
var serviceActivatorParams = new Type[0];

更新:在 serviceActivator 参数中使用 typeof(string) 可以工作,但是我得到了一个未处理的异常。这是新错误:

Line 166:                    p.ServiceContainer = container;
Line 167: });
Line 168:
Line 169: container.RegisterWebApiControllers(config);
Line 170: }

属于以下代码:

var typeOfIMydServiceBase = typeof(IMydServiceBase);
var typeOfMydServiceBase = typeof(MydServiceBase);
var serviceActivatorType = typeof(ServiceActivator);
var serviceActivatorParams = new Type[] { typeof(string) };

typeOfIMydServiceBase.Assembly
.GetExportedTypes()
.Where(exportedType => typeOfMydServiceBase != exportedType && typeOfMydServiceBase.IsAssignableFrom(exportedType))
.Select(mydServiceType => new
{
serviceType = mydServiceType,
interfaceType = mydServiceType.GetInterfaces().First(@interface => @interface != typeOfIMydServiceBase && typeOfIMydServiceBase.IsAssignableFrom(@interface))
})
.ToList()
.ForEach(registrationInfo => container.Register(registrationInfo.interfaceType, () =>
{

var method = serviceActivatorType
.GetMethod("GetService", serviceActivatorParams)
.MakeGenericMethod(new[] { registrationInfo.interfaceType });

var result = method.Invoke(new ServiceActivator(), null);

return result;
}, WebApiRequestLifestyleWithDisposal));
{

container.RegisterInitializer<IMydServiceBase>(p =>
{
p.ServiceContainer = container;
});

container.RegisterWebApiControllers(config);
}
}

最佳答案

var method = serviceActivatorType
.GetMethod("GetService", serviceActivatorParams)

返回 public T GetService<T>(); var serviceActivatorParams = new Type[0]; (来自问题中的评论讨论)

但是这一行:

var result = method.Invoke(new ServiceActivator(), null);

将要调用这个方法:

public T GetService<T>(string key);

通过 null作为 string key 的值.

public T GetService<T>(); 没有要传递的参数,这就是它抛出异常的原因。

要解决您的问题,请尝试:

var serviceActivatorParams = new Type[] { typeof(string) };

或者在没有 null 的情况下调用您的方法参数:

var result = method.Invoke(new ServiceActivator());

关于c# - 值不能为空。参数名称 : type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35315664/

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