gpt4 book ai didi

c# - 为什么无法解析来自程序集的类型 CaSTLe Windsor

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:32 24 4
gpt4 key购买 nike

Windsor caSTLe 无法在Assembly 注册后解析任何类型

我正在尝试实现一项服务,该服务扫描当前库中的所有“.ddl”扩展名,然后通过 Assembly 在温莎城堡中注册它们,但是当我尝试解决时抛出异常并显示消息:“没有支持的组件”服务'。如果我遍历 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>();

当 Resolving 'ComponentNotFoundException' 抛出消息时:

'No component for supporting the service Mes.Utils.DBUpgrade.IDBUpgrader was found'

最佳答案

我从来没有设法在实际代码中找到实际错误,但 Krzysztof Kozmic 建议使用 Classes.FromAssemblyNamed 而不是 Classes.FromAssembly 效果很好 :D

因此,与第 3 节中显示的代码相比,对原始代码所做的更改如下所示:Classes.FromAssemblyNamed(assembly.FullName).Pick().WithServiceBase().WithServiceAllInterfaces().WithServiceSelf()。 LifestyleTransient().

我想问题出在我加载程序集的方式上,但 caSTLe windsor 可能设法加载它们

谢谢大家在评论里的回答和讨论:D

关于c# - 为什么无法解析来自程序集的类型 CaSTLe Windsor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com