0

我正在尝试注册一些通用接口并解决它们。

我有注册功能

private static void RegisterFolderAssemblies(Type t,string folder)
    {
        var scanner = new FolderGenericInterfaceScanner();
        var scanned = scanner.Scan(t,folder); // gets the implementations from a specific folder
        scanned.ForEach(concrete =>
        {
            if (concrete.BaseType != null || concrete.IsGenericType)
            {
                myContainer.RegisterType(t, Type.GetType(concrete.AssemblyQualifiedName), concrete.AssemblyQualifiedName);
            }
        });
    }

由引导程序调用

RegisterFolderAssemblies(typeof(IConfigurationVerification<>),Environment.CurrentDirectory);

注册似乎可以通过,但是当我尝试解决它们时

Type generic = typeof(IConfigurationVerification<>);
Type specific = generic.MakeGenericType(input.Arguments[0].GetType());

var verifications = BootStrap.ResolveAll(specific);

input.Arguments[0] 是实现泛型的类型的对象我也尝试使用 typeof(IConfigurationVerification<>) 代替并得到相同的错误。

当 ResolveAll 是

public static List<object> ResolveAll(Type t)
{
        return myContainer.ResolveAll(t).ToList();
}

我收到一个 ResolutionFailedException 消息“当前类型 Infrastructure.Interfaces.IConfigurationVerification`1[Infrastructure.Configuration.IMLogPlayerConfiguration+LoadDefinitions] 是一个接口,无法构造。您是否缺少类型映射?”

任何帮助都会很棒。

提前致谢

4

1 回答 1

1

您不能拥有接口的实例,但可以从实现该接口的类型中获得。

interface IFoo{
}

class A : IFoo{
}

Activator.CreateInstance(typeof(IFoo)) //fails;
Activator.CreateInstance(typeof(A)) //succeeds;

Unity(或其他 DI 容器)内部的某个地方使用了 Activator。

根据可以实例化的类型过滤您扫描的类型:非抽象类或结构。如果不这样做,您还会注册无法实例化的类型。

导致你得到的错误。

于 2013-11-03T15:49:53.490 回答