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