在 Mark Seemann 的书中 Dependency Injection in .NET ,他指出越来越多的人正在使用具有自动注册支持的 DI 容器,其中容器可以解析所需具体类型的实例,而几乎不需要任何类型的事先配置,这与约定优于配置架构方法相得益彰。但这让我想知道如果我使用了混淆器,这不会破坏代码库并导致容器失败,因为约定已经改变了?
最佳答案
即使您以混淆的方式发布应用程序程序集,您通常仍然可以使用依赖项注入(inject)。这会起作用,因为您通常会使用通用类型(例如 Register<IService, Impl>()
)或 typeof
注册类型的参数(例如 Register(typeof(IService), typeof(Impl))
)。换句话说,编译器可以为您检查的所有内容仍然有效(当混淆器正常工作时)。
您应该密切关注的是编译器无法检查的所有内容。事情如下:
- 通过使用字符串指定参数名称来覆盖构造函数参数。
- 配置方法上的任何约定,其中约定基于名称而不是类型信息,例如 postfixing the name of constructor arguments with "AppSetting" or "ConnectionString" ,期望所有类型的名称以“Controller”结尾,期望类型位于特定的命名空间中。
所以你必须仔细观察这些问题。不要忘记通过creating a verifiable configuration来保护自己在您的情况下,我将在应用程序启动时验证此配置(或添加命令行开关,以便应用程序可以进行自检)。
关于.net - 依赖注入(inject)和代码混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123874/