我有一个接口“IRunAtStartup”,它在几个类中实现。接口有一个方法“Execute”,需要对应用程序启动时的所有类执行。
在编译时,我不知道实现接口的类的数量,因此这确实需要以通用的方式编写。
为IOC和以下使用Unity是我尝试了2种方法的两种方法
1)抛出运行时错误:
container.RegisterTypes(runAtStartUp, WithMappings.FromAllInterfaces);
2)在for循环中的register命令中抛出一个编译错误 - “无法解析类型”。我对Unity世界比较陌生,并怀疑我在这里错过了一些基本问题。
IEnumerable<Type> runAtStartUp = typeFinder.FindClassesOfType<IRunAtStartup>(true);
foreach (var type in runAtStartUp)
{
container.RegisterType<IRunAtStartup, type>(type.AssemblyQualifiedName);
}
foreach (var task in container.ResolveAll<IRunAtStartup>())
{
task.Execute();
}
答案 0 :(得分:1)
方法2的想法是正确的(使用命名注册),但是您有一个C#语法错误。使用方法是:
container.RegisterType(typeof(IRunAtStartup), type, type.AssemblyQualifiedName);