我正在查看如何使用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;
}
有人可以向我解释这些差异,它真的更有效吗?
答案 0 :(得分:1)
使用Func<IUserService>
代替IUserService
作为依赖类型的一个原因是避免循环依赖。
有问题Cyclic dependency with Castle Windsor IoC for NHibernate ISession我已回答并建议使用Func<ISession>
代替ISession
。
如果没有循环依赖,我更喜欢使用简单类型。
如果依赖关系是Func<IUserService>
,我不确定是否容易拥有IUserService
的每个网络请求实例。