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# EntityFramework和IoC接口在洋葱架构中属于哪里?_C#_Design Patterns_Dependency Injection_Domain Driven Design_Inversion Of Control - Fatal编程技术网

C# EntityFramework和IoC接口在洋葱架构中属于哪里?

C# EntityFramework和IoC接口在洋葱架构中属于哪里?,c#,design-patterns,dependency-injection,domain-driven-design,inversion-of-control,C#,Design Patterns,Dependency Injection,Domain Driven Design,Inversion Of Control,我最近发现了Jeffrey Palermo的Onion架构模式,出于好奇,我决定将其用于当前的项目。在我不得不用另一个IoC框架(Unity)替换IoC框架(Ninject)之后,因为一个bug使它完全无法用于我的项目,我注意到我做出了正确的决定,因为我只需更改应用程序中的几个部分,它仍然运行得很好 然而,我还没有弄清楚在这种模式中,与实体框架和IoC相关的某些接口属于何处。假设我的数据库上下文有一个接口: public interface IDatabaseContext : IDisposa

我最近发现了Jeffrey Palermo的Onion架构模式,出于好奇,我决定将其用于当前的项目。在我不得不用另一个IoC框架(Unity)替换IoC框架(Ninject)之后,因为一个bug使它完全无法用于我的项目,我注意到我做出了正确的决定,因为我只需更改应用程序中的几个部分,它仍然运行得很好

然而,我还没有弄清楚在这种模式中,与实体框架和IoC相关的某些接口属于何处。假设我的数据库上下文有一个接口:

public interface IDatabaseContext : IDisposable {

   IDbSet<T> Set<T>() where T: class;

}
依赖注入(DI)非常适合洋葱架构

接口应由使用接口的客户端定义和拥有。如前所述,“客户端[…]拥有抽象接口”(第11章)。因此,任何试图定义像
IDatabaseContext
这样以数据为中心的接口的尝试迟早都会导致问题,因为它违反了各种可靠的原则,如依赖倒置原则或接口分离原则


相反,客户端代码应该定义它们所需的接口。然后您就可以使用实体框架实现这些接口。

只是一个没有引用的观点,但数据库上下文对我来说确实像是基础设施。我认为域应该只针对(注入的)存储库接口工作,甚至不知道存储库在哪里查找/存储数据。存储库在其实现中很可能有一个注入的数据库上下文,但域不应该暴露于该细节。
MyProject.Domain
    - Entities
        - MyEntity.cs
MyProject.Domain.Interfaces
    - IDatabaseContext.cs       // that doesn't fit here, right?
    - IMyEntityRepository.cs
MyProject.Infrastructure
    - Repositories
        - MyEntityRepository.cs
        - DatabaseContext.cs
    - Migrations
        ...
MyProject.Web
    - ... // web stuff
    - NancyBootstrapper.cs
MyProject.Application
    - Services
        - ISnmpClientService.cs
        - SnmpClientService.cs
MyProject.Server
    - KernelHelper.cs 
    - IKernelResolver.cs