我的代码是:
private Dictionary<string, object> services;
public void AddService<T>( string serviceName, T func )
{
if ( services.ContainsKey( serviceName ) )
{
services.Add( serviceName, func );
}
}
public void A()
{
/* doing */
}
public void B( string a )
{
/* doing */
}
public string C( string a )
{
/* doing */
return(a);
}
[TestMethod]
public void Test()
{
services = new Dictionary<string, object>();
AddService<Action>( "Aservice", A );
AddService<Action<string> >( "Bservice", B );
AddService<Func<string, string>>( "Cservice", C );
foreach ( var service in services )
{
/*
* How to print these service like this:
* void A()
* void B(string xxx)
* string C(string xxx)
*/
}
}
我想将一些函数作为服务引入Dictionary
,并在需要时调用它们。
因为我无法确定添加的服务的类型,所以我使用T
来替换Action<string>
,Func<string>
或其他人。
我可以使用这些代码来调用Aservice
,只需要将object
转换为Aservice的类型
var a = services["Aservice"] as Action;
a();
但是当第三方要求任何服务时,他必须知道服务的类型。
所以,我想打印这些服务的类型,包括argumentType,returnType,functionName。
我尝试使用反射,但没有好结果。
我无法使用System.Reflection.RuntimeMethodInfo
,因为无法访问内部。
你能帮助我吗?