值不能为空.参数名称:类型
本文关键字:类型 参数 不能 | 更新日期: 2023-09-27 18:33:58
在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));
结果一直返回为空,当我使用 Object[] {null} 或 Object[]{} 或 Object[]{null,null,etc} 时,我得到参数不匹配。
注意:这是我收到的上述代码的错误消息:
第 156 行:.MakeGenericMethod(new[] { registrationInfo.interfaceType }(;
第 157 行:
第 158 行:变量结果 = 方法。Invoke(new ServiceActivator((, null(;
159行:
第 160 行:返回结果;
有谁知道这里发生了什么以及我该如何解决它????
{
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];
更新:在服务激活器参数中使用类型(字符串(可以工作,但是我得到了一个未经处理的异常。这是新错误:
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)
返回带有var serviceActivatorParams = new Type[0];
public T GetService<T>();
(来自问题中的注释讨论(
但是这一行:
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());