1

我正在查看如何使用 MVC 设置 Unity IoC 的示例,并注意到有人推荐使用 Func 参数的方法。我相信优点是这有点像延迟加载服务,如果它永远不会被调用,它将永远不会被执行并且不会消耗任何资源。

 private readonly Func<IUserService> _userService;

 public CourseController(Func<IUserService> userService)
 {
         this._userService = userService;
 }

与没有 Func 的参数相比:

 private readonly IUserService _userService;

 public CourseController(IUserService userService)
 {
         this._userService = userService;
 }

有人可以向我解释这些差异,它真的更有效吗?

4

1 回答 1

1

使用Func<IUserService>而不是IUserService作为依赖类型的原因之一是避免循环依赖

对于NHibernate ISession我已经回答并建议使用 ofFunc<ISession>而不是ISession.

如果没有循环依赖,我更喜欢使用简单的类型。

如果依赖是Func<IUserService>我不确定是否很容易拥有每个网络请求的IUserService.

于 2013-11-01T21:28:08.327 回答