我应该在不能使用 class 的控制器中使用 Lazy<T> 吗?

Should I use Lazy<T> in a controller where a class may not be used?

我正在编写一个 MVC 5 互联网应用程序并且有一个关于使用延迟和延迟初始化的问题。

Lazy Class 文档说:

Use lazy initialization to defer the creation of a large or resource-intensive object, or the execution of a resource-intensive task, particularly when such creation or execution might not occur during the lifetime of the program.

这是我的情况:

我有一个具有验证服务的控制器 class。此服务 class 仅在控制器创建或编辑功能中创建或编辑模型对象时使用。

我是否应该使用 Lazy 进行此验证 class?我在想也许吧,因为用户可以浏览到索引、详细信息和删除功能,并且永远不会使用验证服务 class。验证 class 有超过 900 行代码。

此外,我有一个异常服务 class,用于在发生错误时显示自定义错误页面。这个异常class有100行代码,只在异常发生时使用。如果没有发生异常,则不会使用此class。我应该为此异常使用 Lazy class 吗?

我没有用过Lazy,求教一下,不知道以上两种情况到底该不该用Lazy

提前致谢。

编辑

有人可以解释一下在上述情况下是否有任何理由不使用 Lazy 吗?异常缓存是我需要担心的事情吗?

验证服务 class 有一个接受 IGenericMultipleRepository 对象的构造函数。这个对象是一个用于访问存储库的接口,我在单元测试时使用它。异常服务 class 具有默认构造函数。

我肯定会为验证服务使用惰性初始化。对于异常处理程序,您可以采用任何一种方式 - 预期会出现异常。惰性初始化的好处是您的代码响应更快并且使用更少的资源。缺点是要学一个新的class。一旦你学会了它,你可以在很多地方使用它。

代码行数确实与实例化 class 的 运行 时间成本关系不大。如果没有静力学并且你有一个空的构造函数,那么实例化你的验证或异常会很便宜 classes.

一个更重要的问题是,通过使用 Lazy 或直接实例化它们,您会将控制器 class 与这些服务 class 紧密耦合,这将使单独测试它们变得更加困难。

在没有看到代码的情况下很难准确地说出来,但我怀疑你最好使用依赖注入将每个 class 注入到控制器中(并且每个都有一个接口)。

通过这种方法,您可以独立测试每个 class,您可以用模拟代替验证和异常 classes,并且您可以在下次有这些 classes 时重用这些 classes需要一个控制器。

如果 class 的实例化成本很高,您仍然可以使用依赖注入容器,但您可以使用 Func<T> 依赖。例如参见 [​​=11=].

我还应该补充一点,class实例化成本高昂的 es 本身通常是一个坏主意:构造函数不应该做重要的工作。