【发布时间】:2014-07-24 08:31:04
【问题描述】:
我有一个跨多个类实现的接口“IRunAtStartup”。该接口有一个“执行”方法,需要在应用程序启动时为所有类执行。
在编译时,我不知道实现该接口的类的数量,因此这确实需要以通用方式编写。
将 Unity 用于 IOC,以下是我尝试过 2 种方法的 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();
}
【问题讨论】:
-
你能发布堆栈跟踪吗?方法 2 对我来说似乎没问题,其中一种类型的注册可能存在问题。
-
方法 2 甚至无法编译。这是相同的屏幕截图:dl.dropboxusercontent.com/u/11374665/approach-2.JPG
-
哦。您使用了无效的 C# 语法,错过了这一点。请改用
container.RegisterType(typeof(IRunAtStartup), type, type.AssemblyQualifiedName)。 -
效果很好......你想把它作为答案发布,以便我可以将它标记为答案吗?我知道我错过了一些基本的东西,只是没有意识到它是什么......
-
我已经发布了答案。
标签: c# unity-container ioc-container