C# 横切层|自动映射|依赖注入

C# 横切层|自动映射|依赖注入,c#,model-view-controller,architecture,automapper,cross-cutting-concerns,C#,Model View Controller,Architecture,Automapper,Cross Cutting Concerns,我有一个MVC分层应用程序,我有一些关于横切层的问题。到目前为止,该层具有日志记录、DI、错误处理和缓存 我创建了一个项目,并将所有这些功能按文件夹分开。这样行吗?还是应该为每个功能创建一个项目 因为我在这个项目中设置了Autofac(DI文件夹),所以我不得不添加对其他项目的引用:模型、存储库和服务。可以将这些引用添加到横切项目中吗 我是否应该创建一个单独的项目来对公共功能进行分组?例如枚举、常量和方法,如GetMd5Hash。或者我应该使用横切项目来实现这一点 我是否应该把AutoPalpo

我有一个MVC分层应用程序,我有一些关于横切层的问题。到目前为止,该层具有日志记录、DI、错误处理和缓存

我创建了一个项目,并将所有这些功能按文件夹分开。这样行吗?还是应该为每个功能创建一个项目

因为我在这个项目中设置了Autofac(DI文件夹),所以我不得不添加对其他项目的引用:模型、存储库和服务。可以将这些引用添加到横切项目中吗

我是否应该创建一个单独的项目来对公共功能进行分组?例如枚举、常量和方法,如GetMd5Hash。或者我应该使用横切项目来实现这一点


我是否应该把AutoPalpor当作交叉关注点?到目前为止,我在表示层中设置了它,以便从实体转换为ViewModel,从ViewModel转换为实体。正因为如此,我不得不添加一个我希望避免的模型引用。

通常,您的应用程序中使用了交叉关注点(CCC)帮助程序。这些助手可以在单个或不同的项目中定义。在决定库的粒度之前,我亲自问了自己这两个问题:

1-A与B有关系吗?我可以把它们归为一类吗(例如CCC)

2-是否有任何情况下,我需要在另一个项目中使用没有B的A(或反之亦然)

如果对第一个问题的回答是肯定的,第二个问题是否定的,那么把它们放在同一个库/包中。当你想把东西放在不同的项目上时,总是考虑可重用性。

这些帮助程序不应该引用您的主要项目,因为它们只是帮助程序和实用程序,应该是业务逻辑和业务领域无关的

在您的主要项目(MVC应用程序或业务逻辑层的库)中,您将在整个代码中使用这些帮助程序。或者您将使用面向方面(AOP)库将它们注入到代码中


我不会把像DI和AutoPad之类的东西当作交叉关注点。日志记录、审核、身份验证、授权和缓存是CCC的好例子。但是像DI和Automapper这样的东西是你用来实现架构模式和设计的东西,所以它们是不同的。没有必要创建新的库或帮助程序来将它们应用到您的项目中。

不客气,是的,您可以这样做,但是将它们放在单独的项目中又有什么意义呢?您想在不同的项目中重用它们吗?如果是这样的话,请为他们创建项目。

谢谢@akazemis,那么您认为有一个项目来设置DI,另一个项目来设置映射会更有趣吗?DI和mapping都必须知道其他项目,这就是为什么我要将它们分开。