I want to cast an object as an generic custom Interface.
This is my interface:
public interface IContainer<T>
{
IEnumerable<T> SaveToCache(IEnumerable<T> models);
}
I'm using this interface in a Serviceclass:
public class Manager()
{
public Manager()
{
address = new Container<Address>(this);
// more containers are constructed here...
}
private static Container<Address> address;
public static Container<Address> Address => address;
// here are more properties of Type Container<T>
}
Now I want to call the SaveToCacheAsync
method dynamically like this:
private void SaveItems(IEnumerable<object> items, string typeName)
{
object container = typeof(Manager)
.GetRuntimeProperty(typeName).GetValue(null, null);
var t = Type.GetType($"MyNameSpace.Models.{typeName}");
// variant A - doesn't work, but makes clear what I want to do
(container as IContainer<t>).SaveToCache(items);
// variant B - doesn't work either
var saveMethod = container.GetType()
.GetRuntimeMethod("SaveToCache", new Type[] { Type.GetType($"System.Collections.Generic.List`1[{t.FullName}]") })
.MakeGenericMethod(new Type[] { t });
saveMethod.Invoke(container, new object[] { });
}
The project is a PCL, therefore I used GetRuntimeMethods
.
Aucun commentaire:
Enregistrer un commentaire