我已将Unity 4容器更新为Unity 5.8,但在此版本中按约定注册存在问题。它完全不起作用。新鲜项目,安装以下软件包:
Install-Package Unity.Container -v 5.8.7
Install-Package Unity.RegistrationByConvention -v 2.1.7
超级简单的代码:
class Program
{
static void Main(string[] args)
{
UnityContainer uc = new UnityContainer();
uc.RegisterTypes(AllClasses.FromLoadedAssemblies(), (c) => WithMappings.FromMatchingInterface(c));
}
}
并给出异常
System.TypeLoadException: „Inheritance security rules violated while overriding member:
Unity.RegistrationByConvention.Exceptions.DuplicateTypeMappingException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.
我不知道出什么问题了,它曾经在以前的版本中工作过。有什么知道如何在新的Unity中使用召集注册的方式吗?
答案 0 :(得分:3)
看着this answer,这似乎是Unity.RegistrationByConvention的问题。他们的DuplicateTypeMappingException
应该在SecurityCriticalAttribute
上有GetObjectData
,确实存在于System.Exception
中,正如您发布的例外所述。
与此同时,我认为只注册您自己的类型就足够了,而不仅仅是项目中每个库中的所有内容。