温莎城堡在通过大会注册后无法解析任何类型
我正在尝试实现一项服务,该服务扫描当前库中的所有'.ddl'扩展名,然后在Assembly Windsor中通过程序集将其注册,但是当我尝试解决时,出现异常消息:'无支持组件服务'。如果我通过Kernel.GetAssignableHandlers进行迭代,则可以看到所有类型都已注册。
1。获取程序集的根名称:
var delimiterIndex = assembly.FullName.IndexOfAny(new[] { '.' });
2。以数组的形式获取所有装配体
return Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.*", SearchOption.AllDirectories)
.Where(x => Path.GetExtension(x).Equals(".dll", StringComparison.InvariantCultureIgnoreCase))
.Where(x => Path.GetFileName(x)
.StartsWith(rootAssemblyName, StringComparison.InvariantCultureIgnoreCase)).Select(Assembly.LoadFile).ToArray();
3。在温莎城堡容器中注册每个程序集
Classes.FromAssembly(assembly).Pick().WithServiceBase().WithServiceAllInterfaces().WithServiceSelf().LifestyleTransient()
4。解决
var instance = _container.Resolve<IFoo>();
当出现以下消息时,抛出“ ComponentNotFoundException”:
“未找到支持服务Mes.Utils.DBUpgrade.IDBUpgrader的组件”
答案 0 :(得分:1)
我从未设法在实际代码中找到实际的错误,但是Krzysztof Kozmic建议使用Classes.FromAssemblyNamed
代替Classes.FromAssembly
,这很有效:D
因此与第3节中显示的相比,原始代码所做的更改如下所示:Classes.FromAssemblyNamed(assembly.FullName).Pick().WithServiceBase().WithServiceAllInterfaces().WithServiceSelf().LifestyleTransient()
。
我想问题出在某种程度上是我加载程序集的方式,但是温莎城堡可能设法加载了它们
感谢您在评论中提供所有答案和讨论:D