繁体   English   中英

注册并解析通用接口Unity

[英]Register and Resolve Generic Interfaces Unity

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

我有注册功能

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]是接口,无法构造。是否缺少类型映射?”

任何帮助都会很棒。

提前致谢

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

interface IFoo{
}

class A : IFoo{
}

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

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

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

导致出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM