在 Mark Seemann 的.NET 中的 Dependency Injection一书中,他指出越来越多的人正在使用具有 AUTO-REGISTRATION 支持的 DI 容器,其中容器可以解析所需具体类型的实例,而无需几乎任何类型的事先配置,这符合约定过度配置架构方法。但这让我想知道如果我使用了混淆器,这会不会破坏代码库并导致容器失败,因为约定已经改变?
问问题
992 次
2 回答
3
您通常仍然可以使用依赖注入,即使您以模糊的方式发布您的应用程序程序集。这将起作用,因为您通常会使用泛型类型(例如Register<IService, Impl>()
)或typeof
参数(例如Register(typeof(IService), typeof(Impl))
)来注册类型。换句话说,编译器可以为您检查的所有内容仍然可以工作(当混淆器正常工作时)。
您应该密切关注的是编译器无法检查的所有内容。事情如:
- 通过使用字符串文字指定参数的名称来覆盖构造函数参数。
- 任何基于名称而不是类型信息的配置方法的约定,例如使用“AppSetting”或“ConnectionString”为构造函数参数的名称添加后缀,期望所有类型的名称以“Controller”结尾,期望要在特定命名空间中的类型。
所以你必须仔细观察这些问题。不要忘记通过创建可验证的配置来保护自己,在您的情况下,我将在应用程序启动时验证此配置(或添加命令行开关,以便应用程序可以进行自检)。
于 2012-10-29T15:02:04.033 回答
1
这完全取决于您的 DI 是如何工作的。如果您基于类或接口名称(例如基类和标记接口)进行 DI,并且这些类或接口位于混淆库中,那么是的,您的 DI 将中断。如果您有一个单独的库,可能是某种通用库或某种核心,它没有被混淆,并且它的类和接口在 ID 中使用,那么即使使用库被混淆,您也可以。外部的、未混淆的库的名称不会改变。
要查看示例,请使用反编译器查看混淆的库或 exe。您将看到对外部库(如 .NET)的引用不会也不能被混淆。
于 2012-10-29T14:51:29.260 回答