Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设计Unity容器?_C#_Design Patterns_Inversion Of Control_Unity Container - Fatal编程技术网

C# 如何设计Unity容器?

C# 如何设计Unity容器?,c#,design-patterns,inversion-of-control,unity-container,C#,Design Patterns,Inversion Of Control,Unity Container,我有三个项目:WebAPI、服务和存储库 WebAPI引用了Services,Services引用了Repository 现在我需要为服务和存储库添加一个统一容器,但是在WebAPI中,它不允许添加对存储库的引用,WebAPI只对服务有引用 我知道如何为服务配置unity,但如何为存储库 如何更改此项以获得所需的设计 我的建议是简单地添加另一个项目——将其命名为“基础设施”。然后,这个项目可以全权负责向IoC注册,因此这个项目需要引用包含任何需要注册的项目,WebAPI项目可以调用它 这样Web

我有三个项目:WebAPI、服务和存储库

WebAPI
引用了
Services
Services
引用了
Repository

现在我需要为
服务
存储库
添加一个统一容器,但是在
WebAPI
中,它不允许添加对
存储库
的引用,
WebAPI
只对
服务
有引用

我知道如何为
服务
配置
unity
,但如何为
存储库


如何更改此项以获得所需的设计

我的建议是简单地添加另一个项目——将其命名为“基础设施”。然后,这个项目可以全权负责向IoC注册,因此这个项目需要引用包含任何需要注册的项目,WebAPI项目可以调用它


这样WebApi项目就不需要直接了解Respository中的任何内容;它只知道如何获得一个IoC容器,然后所有东西都可以使用它。

为什么不能添加对存储库的引用?也许您可以在
服务
中有一个方法,它接受一个Unity容器,并且该方法可以在
存储库
中注册依赖项?这里的缺点是,
服务
需要有Unity引用,我猜您是在试图避免它?@GPW,因为
控制器
存储库
无关。数据通过
服务
到达
存储库
,那么就只需要架构决策了吗?很公平。我对这些事情所采取的方法大体上正如我在上面所建议的那样——每个项目都有一个方法,它在其中注册它的依赖关系。类似的替代方案可以是一个完全独立的“基础设施”项目,它引用了每个需要注册依赖项的项目,并且负责向IoC注册所有项目的所有内容(并且仅在启动时由WebApi项目调用)。@GPW,是的,我喜欢你的最后一个想法。请将其作为答案发布,以便投票。我已经这样做了:)