[英]Passing Type to to method with generics
嗨,我正在嘗試圍繞Unity創建一個通用包裝器,這將使我能夠隨時更改IoC框架而無需
public static void RegisterTypes(IDependencyInjectionContainerWrapper container)
{
List<Type> types = LoadTypesFromAssemblies();
foreach (var type in types)
{
var interfaceType= type.CustomAttributes
.FirstOrDefault(a => a.AttributeType.Name == typeof(DependencyService).Name)
.ConstructorArguments[0].Value;
container.RegisterType<type, interfaceType>();
}
}
這里發生的事情是我將屬性DependencyService應用於列表類型。
然后,我對其進行迭代,得到該屬性的第一個構造函數參數。
然后我嘗試在拋出泛型的容器中注冊類型。這是我遇到問題的地方。
我不知道如何傳遞我在RegisterType方法泛型中擁有的兩種類型,因為我傳遞的是泛型而不是對象類型,所以我遇到了錯誤
反正有解決我的問題的方法嗎?
如果依賴項容器具有非泛型方法,則調用該方法:
container.RegisterType(type, interfaceType);
如果它沒有非通用方法,並且可以修改源代碼,則強烈建議您提供一個; 它使這種事情變得容易得多。 通常,使用這樣的容器,您的泛型方法最終將調用您的非泛型方法:
public void RegisterType(Type implType, Type ifaceType)
{
...
}
public void RegisterType<TImpl, TIface>() where TImpl : TIface
{
this.RegisterType(typeof(TImpl), typeof(TIface));
}
否則,您將不得不通過反射動態提供通用參數:
var methodInfo = container.GetType().GetMethod("RegisterType");
var actualMethod = methodInfo.MakeGenericMethod(type, interfaceType);
methodInfo.Invoke(container);
但這既不高效也不特別優雅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.