温莎城堡在通过大会注册后无法解析任何类型

我正在尝试实现一种服务,该服务扫描当前库中的所有'.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的组件”

最佳答案

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

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

我想问题出在某种程度上是我加载程序集的方式,但温莎城堡设法设法加载了它们

谢谢所有的答案和评论中的讨论:D

关于c# - 来自装配体的类型如何无法解析温莎城堡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55733886/

10-11 02:15