我对IoC来说还是个新手,并且有点坚持未来的最佳实践。我正在开发的项目是用Sharp Architecture构建的MVC。我们当前使用IoC的方式是在每个控制器的构造函数中指定存储库接口,让Castle Windsor完成剩下的工作并将这些实例传递到每个模型中。然而,由于控制器可能正在实例化许多新模型,而这些模型反过来调用其他模型等,它很容易失控,一些控制器现在在构造函数参数中有20多个存储库接口。
当每个控制器继承BaseController时,我正在考虑建立一个存储库,这只是一个存储库列表,其中一个Get()方法返回类型为T的存储库,这可以在基本控制器中实例化/填充刚刚进入每个模型,我们就不必担心所有存储库被传递。
然而,这种感觉有些错误,我不禁感到Castle Windsor应该做这样的事情,但是无法弄明白。
很想听听你对此的看法。
感谢。
答案 0 :(得分:1)
存储库的存储库,听起来像工作单元模式。您可以做的是注入IUnitOfWorkFactory
,允许您创建新的IUnitOfWork
实例。工作单元的一个单元,而不是包含所有存储库。
查找此类实施的示例here。
就个人而言,我不会将存储库甚至工作单元实例注入控制器,而是将服务注入控制器。该服务将把工作单元或存储库作为依赖。