依赖注入和代码混淆

时间:2012-10-29 14:44:18

标签: .net design-patterns architecture dependency-injection

在Mark Seemann的书Dependency Injection in .NET中,他指出更多的人正在使用具有AUTO-REGISTRATION支持的DI容器,其中容器可以在几乎没有任何先前配置的情况下解析所需的具体类型的实例,这很顺利与配置架构方法的约定。但这让我想知道我是否使用混淆器不会破坏代码库并导致容器失败,因为约定已经改变了?

2 个答案:

答案 0 :(得分:2)

即使以混淆的方式发送应用程序集,您通常仍可以使用依赖项注入。这将起作用,因为您通常会使用泛型类型(例如Register<IService, Impl>())或typeof参数(例如Register(typeof(IService), typeof(Impl)))来注册类型。换句话说,编译器可以检查的所有内容仍然有效(当混淆器正常工作时)。

您应密切关注的是编译器无法检查的所有内容。事情:

因此,您必须仔细观察这些问题。不要忘记creating a verifiable configuration保护自己,在您的情况下,我会在应用程序启动时验证此配置(或添加命令行开关,以便应用程序可以进行自检)。

答案 1 :(得分:1)

这完全取决于你的DI如何运作。如果您根据类或接口名称(例如基类和标记接口)执行DI,并且这些类或接口位于模糊库中,那么是的,您的DI将会中断。如果您有一个单独的库,可能是某种类型的公共或核心,它没有被混淆,并且它的类和接口在ID中使用,那么即使消费库被混淆,您也可以。外部未经模糊处理的库的名称不会更改。

要查看示例,请在模糊库或exe中查看反编译器。您将看到对外部库(如.NET)的引用不会也不会被混淆。