簡體   English   中英

使用泛型將類型傳遞給方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM