Hallo,
ich würde gerne eine generische Methode, die zwei Typangaben benötigt und zudem noch überladen ist per Reflection füllen. Wie das mit einer Typangabe funktioniert habe ich schon herausgefunden, jedoch bekomme ich es nicht hin mehrere Typangaben zu setzen.
Kann mir bitte einer von euch sagen, wie das geht?
pinki
Hallo,
meinst du mit mehreren Typangaben so etwas in der Art?
class Program
{
static void Main(string[] args)
{
var mi = typeof(Program).GetMethods().Where(f => f.Name == "DoIt" && f.GetGenericArguments().Length == 2).FirstOrDefault();
if (mi != null)
{
mi = mi.MakeGenericMethod(typeof(string), typeof(int));
var res = mi.Invoke(new Program(), new object[] { "Hello", 123 });
Console.WriteLine(res.ToString());
}
}
public A DoIt<A, B>(A a, B b)
{
return a;
}
public C DoIt<A, B, C>(A a, B b, C c)
{
return c;
}
}
Hallo Sarc,
Genau so.
Besten Dank! 👍
Das war viel einfacher als ich dachte. =)
Ich hatte vor die Register<TInterface, TClass>-Methode des ISimpleIoc aus dem MVVM light Framework dynamisch zu füllen.
So ist das dann geworden:
Type[] typesToLookFor = new Type[] { typeof(IModel) };
ISimpleIoc ioc = SimpleIoc.Default;
MethodInfo methodInfo = ioc.GetType()
.GetMethods()
.Where(m => m.Name == "Register" &&
m.GetGenericArguments().Length == 2 &&
m.GetParameters().Length == 0)
.FirstOrDefault();
foreach (Type interfaceType in typesToLookFor) {
Type implementationType = TypeLister.GetExternalTypesThatImplement(interfaceType).FirstOrDefault();
if (implementationType == null) throw new ImplementationNotFoundException(interfaceType);
MethodInfo registerCallInfo = methodInfo.MakeGenericMethod(interfaceType, implementationType);
registerCallInfo.Invoke(ioc, null);
}