C# 传递函数<;T>;在使用Unity IoC和MVC时,控制器结构的优势是什么?
我正在看一个如何使用MVC设置Unity IoC的示例,注意到有人推荐使用Func的参数。我相信这样做的好处是,这有点像延迟加载服务,如果它从未被调用,它将永远不会被执行,也不会消耗任何资源C# 传递函数<;T>;在使用Unity IoC和MVC时,控制器结构的优势是什么?,c#,asp.net-mvc,entity-framework,dependency-injection,unity-container,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 = u
private readonly Func<IUserService> _userService;
public CourseController(Func<IUserService> userService)
{
this._userService = userService;
}
有人能给我解释一下区别吗?它真的更有效吗?使用
Func
而不是IUserService
的原因之一,因为依赖类型是避免循环依赖
我回答了这么多问题,并建议使用Func
而不是ISession
如果没有循环依赖,我更喜欢使用简单的类型
如果依赖项是
Func
,我不确定是否很容易在每个web请求中拥有IUserService
实例,这是使用Func
而不是IUserService
的原因之一,因为依赖项类型是避免循环依赖项
我回答了这么多问题,并建议使用Func
而不是ISession
如果没有循环依赖,我更喜欢使用简单的类型
如果依赖项是
Func
,我不确定是否很容易获得IUserService
的每个web请求实例,为什么不Lazy
?@TimS.:可能是因为Unity 2支持自动解析Func
。Unity 3现在还支持Lazy
。如果对象在初始化时没有做太多的工作,那么对象初始化会非常快。考虑构造函数中的太多内容和许多变量初始化。当资源或性能毫无疑问地受到服务初始化的影响时,请使用这样的结构。它确实增加了复杂性,复杂性在维护中总是有代价的。此外,在生命周期管理方面,it部门还会跟踪IoC容器。通过延迟初始化,操作方法负责何时以及如何处理对象,这可能会导致在控制器中重复使用。为什么不延迟?@TimS.:可能是因为Unity 2支持自动解析Func
。Unity 3现在还支持Lazy
。如果对象在初始化时没有做太多的工作,那么对象初始化会非常快。考虑构造函数中的太多内容和许多变量初始化。当资源或性能毫无疑问地受到服务初始化的影响时,请使用这样的结构。它确实增加了复杂性,复杂性在维护中总是有代价的。此外,在生命周期管理方面,it部门还会跟踪IoC容器。通过延迟初始化,动作方法负责何时以及如何处理对象,这可能会导致控制器中重复使用。
private readonly IUserService _userService;
public CourseController(IUserService userService)
{
this._userService = userService;
}