我在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