Unity 5.8:按约定注册“违反了继承安全性规则”

时间:2018-08-22 13:20:47

标签: c# .net inversion-of-control unity-container

我已将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中使用召集注册的方式吗?

1 个答案:

答案 0 :(得分:3)

看着this answer,这似乎是Unity.RegistrationByConvention的问题。他们的DuplicateTypeMappingException应该在SecurityCriticalAttribute上有GetObjectData,确实存在于System.Exception中,正如您发布的例外所述。

与此同时,我认为只注册您自己的类型就足够了,而不仅仅是项目中每个库中的所有内容。