アプリケーションで Unity 2.1 を使用していますが、1 つの解決シナリオのタイトルにエラーが表示されます。どこを見たらいいのかわからない。
- Windows 7 64ビットを実行しています
- 32 ビット アプリケーションが有効になっている
- 「Any CPU」と「x64」に対してビルドを試みました
この問題は 64 ビット アーキテクチャに関連していないようです。どんな援助でも大歓迎です!
シナリオ
//works: class = "ProductManager<Product>
Container.Resolve<IProductManager<Product>>()
//works: class = "OrderManager"
Container.Resolve<IOrderManager()
//works: class="OrderManager"
Container.Resolve<IOrderManager("OrderManager")
//DOESN'T WORK: EXCEPTION: BadImageFormatException
Container.Resolve<IOrderManager("OrderManager")
//works: class="GenericOrderManager<Order>" (obviously)
var manager = new GenericOrderManager<Order>();
コード
Unity.config
<alias name="IProductManager" type="Assembly1.Namespace.IProductManager`1" />
<alias name="ProductManager" type="Assembly2.Namespace.ProductManager`1" />
<alias name="IOrderManager" type="Assembly1.Namespace.IOrderManager" />
<alias name="OrderManager"
type="Assembly1.Namespace.OrderManager" />
<alias name="OrderManager"
type="Assembly1.Namespace.OrderManager"
name="OrderManager" />
<alias name="GenericOrderManager"
type="Assembly2.Namespace.GenericOrderManager`1"
name="GenericOrderManager" />
ProductManager + インターフェース
public interface IProductManager<TProduct> where TProduct : Product
{
}
public class ProductManager<TProduct> : IProductManager<TProduct> where TProduct : Product
{
}
OrderManager + インターフェイス
public interface IOrderManager
{
}
public class OrderManager : IOrderManager
{
}
public class OrderManager<TOrder> : OrderManager where TOrder : Order
{
}
StackTrace で更新します。
System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod (IRuntimeMethodInfo メソッド) で System.Reflection.Emit.DynamicMethod.CreateDelegate (Type delegateType) で Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.GetBuildMethod() で Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan (IBuilderContext コンテキスト、NamedTypeBuildKey buildKey) Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext コンテキスト) Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext コンテキスト) で Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t、Object)既存、文字列名、IEnumerable`1 resolverOverrides)