我在Unity IoC中实现动态加载和注册我的程序集。Unity无法解析基本依赖链
考虑到这些类:
public interface IA { }
public interface IB { }
public interface IC { }
public class A : IA { }
public class B : IB
{
public B(IA a) { }
}
public class C : IC
{
public C(IB b) { }
}
而且这种配置:
var assembly = Assembly.LoadFile(@"path\MyAsm.dll");
container.RegisterTypes(
AllClasses.FromAssemblies(assembly),
WithMappings.FromAllInterfacesInSameAssembly,
WithName.Default,
WithLifetime.Transient);
代码:
var c = container.Resolve(typeof(IC));
抛出:
类型 “Microsoft.Practices.Unity.ResolutionFailedException”第一次机会异常出现在 Microsoft.Practices.Unity.dll
附加信息:依赖解析失败,类型= “MyAsm.IC”,名称=“(无)”。
发生异常时:解决。
异常是:InvalidOperationException - 类型IC没有 可访问的构造函数。
在异常时,该容器是:
MyAsm.IC,(无)
上述所有代码都在相同的组件MyAsm进行。在调试中分析容器,Registrations
属性列出了A
,B
和C
到它们各自的接口以及它们自己的映射的正确集合。
任何想法?
SOLUTION
泰勒的回答后,我改变了:
var assembly = Assembly.LoadFile(@"path\MyAsm.dll");
到
var assembly = Assembly.LoadFrom(@"path\MyAsm.dll");
这解决了问题。 Assembly
上的这两种方法具有相同的参数和相同的返回类型以及vary just slightly in behavior。 纯洁的邪恶。
给这名男子啤酒。一旦你知道这个问题,实际的解决方案更容易(见Q)... –
哇,我没有意识到这种微妙的区别。感谢那! – TylerOhlsen