情况如下:
ICategorized
使用 ICategoryService
来管理类别。
public interface ICategorized
{
ICategory Category { get; set; }
}
然后一些类实现ICategorized
。
public class Cart : ICategorized
{
...
ICategory Category {
get {
return _categoryService.GetItemCategory(...)
}
set {
_categoryService.SetCategoryForItem(...);
};
}
...
}
那么,设置_categoryService
实施的最佳解决方案是什么?
通过构造函数或属性注入?
使用构造函数可能会导致非常复杂的构造函数,如
public class Cart : ICategorized. ITagged, ISecured, IMediaSupport {
public Cart(ICategoryService cs, ITagService ts, ISecurityService ss, IMediaService ms) {...}
...
}
我怀疑这是一个好设计。有什么想法吗?
你的建议是什么? 我可以赋予Cartateg责任ICategoryService但在这种情况下我不能使用Lazy加载。像
这样的东西public class CartService : ICartService {
public CartService(ICategoryService cs) {...}
...
}
答案 0 :(得分:4)
我更喜欢构造函数注入而不是属性注入,主要是因为它明确了组件所需的服务。如果使用IoC容器,则不必担心构造函数变得过于复杂,因为您永远不必使用构造函数,只有容器才能使用。
物业注入可用于非必需服务。
顺便说一下;一般来说,非常长的构造函数签名可能意味着您的类不遵守单一责任原则,也许它应该重构为两个或更多单独的类。