I am importing methods with MEF
. I call this method to get all exported methods:
var methods = container.GetExports<Func<int,int,double>,MyMetadata>("contract name");
NOTE: Sometimes Func<int,int,double>
changes. For example it might have more parameters: Func<int,int,int,double>
.
When I fire methods I know how many parameters to pass. My question is how can I dynamically pass parameters to imported methods?
UPDATE:
IEnumerable<Lazy<Func<int,int,double>,MyMetadata>> Plugins;
public IEnumerable RunAllPlugins(int a, int b)
{
//my old approach
foreach (var p in Plugins)
{
dynamic a = p;
var b = a.Value.Invoke(a,b); //here I want to pass parameters dynamically
}
//this is new approach which is answer
//now I can pass parameters like array of objects
foreach(var lazyMethod in Plugins)
{
Delegate d=lazyMethod.Value;
object[] numbers=new object[]{1,2};
var result=d.DynamicInvoke(numbers);
}
return null;
}