这更像是一个良好的实践问题。我想提供不同的通用库,如日志记录、缓存等。这些库包括许多第三方库,如MS企业库、log4Net、NCache等。
我想知道直接使用这些库是否是一个好的实践,或者创建每个服务的包装器,并使用DI将该服务注入代码中会更好。
敬礼
这更像是一个良好的实践问题。我想提供不同的通用库,如日志记录、缓存等。这些库包括许多第三方库,如MS企业库、log4Net、NCache等。
我想知道直接使用这些库是否是一个好的实践,或者创建每个服务的包装器,并使用DI将该服务注入代码中会更好。
敬礼
Log
的简单方法的 ILoggerFacade
接口。使用这个概念,以下是我如何在单元测试中定义一个模拟记录器(使用 Moq):var loggerMock = new Mock<ILoggerFacade>(MockBehavior.Loose);
loggerMock.Setup(lg => lg.Log(It.IsAny<string>(), It.IsAny<Category>(), It.IsAny<Priority>()))
.Callback((string s, Category c, Priority p) => Debug.Write(string.Format("**** {0}", s)));
loggerMock.Object
传递给被测试的对象,或者配置使用它的依赖注入器。看起来你正在考虑将日志记录实现封装起来,然后与不同的团队共享。基于此,以下是一些优缺点。
我之前曾经封装过企业库的一部分,但我认为它并没有增加太多价值。我认为你最好:
这更多是一个主观问题,但在我看来,将任何应用程序/库特定的使用包装到具有深思熟虑的接口的服务模型设计中是一件好事,这样您就可以轻松地使用 DI,以后如果您需要从 EntLib 数据应用程序块切换到 NHibernate,您不需要重新架构整个应用程序。
个人认为最好使用一个封装器(wrapper),因为这些是你不希望在运行单元测试时运行的东西(假设你也在进行单元测试)。