簡體   English   中英

IsAssignableFrom() 在應該返回 true 時返回 false

[英]IsAssignableFrom() returns false when it should return true

我正在開發一個插件系統,它加載包含在指定文件夾中的 .dll。 然后我使用反射來加載程序集,遍歷它們包含的類型並識別任何實現我的IPlugin接口的類型。

我正在使用類似於以下的代碼進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

出於某種原因,IsAssignableFrom() 在應該返回 true 時一直返回 false。 我嘗試通過顯式地給它一個應該通過的類型來替換t ,它工作正常,但由於某種原因,它不適用於從加載的程序集返回的類型。 為了讓事情變得更奇怪,代碼在我同事的機器上運行良好,但在我的機器上卻不行。

有誰知道可能導致這種行為的任何事情?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

我有一個類似的問題,這是由於插件的依賴注入引起的。 假設程序集包含實現 ISomeInterface 的 MyConcreteClass 的定義。 MyConcreteClass 構造函數需要我添加到 serviceProvider 的依賴項。 我正在嘗試使用實例化對象

 using Microsoft.Extensions.DependencyInjection;

 private IEnumerable<ISomeInterface> CreatePlugins(Assembly assembly)
 {
        ServiceCollection serviceCollestion = new ServiceCollection();
        serviceCollestion.AddSingleton(dependency1);
        serviceCollestion.AddSingleton(dependency2);
        serviceCollestion.AddSingleton(dependency3);
        var serviceProvider = serviceCollestion.BuildServiceProvider();

        foreach (Type type in assembly.GetTypes())
        {
            if (typeof(My.Namespace.ISomeInterface).IsAssignableFrom(type))
            {
                ISomeInterface result = ActivatorUtilities.CreateInstance(serviceProvider, type) as ISomeInterface;
            }
        }
 }

我得到了例外:

嘗試激活“Another.Namespace.MyConcreteClass”時無法解析“My.Namespace.ISomeInterface”類型的服務。 在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance(IServiceProvider 提供程序)在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance(IServiceProvider 提供程序,類型 instanceType,對象 [] 參數)

然后我發現調用 ActivatorUtilities.CreateInstance 的進程已經引用了 MyConcreteClass 的依賴項,這就是實例化失敗的原因。 為了解決這個問題,我遵循下面鏈接中的建議,並在加載之前從我的進程引用的任何程序集中清除了 Another.Namespace 的文件夾。

.NET:無法將對象轉換為它實現的接口

我正在一個插件系統上加載指定文件夾中包含的.dll。 然后,我使用反射來加載程序集,遍歷它們所包含的類型,並標識實現我的IPlugin接口的任何程序集。

我正在使用類似於以下代碼的方式對此進行檢查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

由於某些原因,IsAssignableFrom()在應返回true時始終返回false。 我試圖通過顯式地給它賦予應該傳遞的類型來替換t ,並且它可以正常工作,但是由於某些原因,它不適用於從已加載程序集返回的類型。 使事情變得奇怪的是,該代碼在我的同事的機器上可以正常工作,但在我的機器上卻無法正常工作。

有誰知道任何可能導致這種行為的信息?

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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