将Unity IoC与MVC一起使用时,将Func <t>传递给控制器​​结构?</t>

时间:2013-11-01 19:51:29

标签: c# asp.net-mvc entity-framework dependency-injection unity-container

我正在查看如何使用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;
 }

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

1 个答案:

答案 0 :(得分:1)

使用Func<IUserService>代替IUserService作为依赖类型的一个原因是避免循环依赖

有问题Cyclic dependency with Castle Windsor IoC for NHibernate ISession我已回答并建议使用Func<ISession>代替ISession

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

如果依赖关系是Func<IUserService>,我不确定是否容易拥有IUserService的每个网络请求实例。