2016-01-22 63 views
0

我想分开我的ASP。 NET MVC 5 + WebApi2溶液放入单独的逻辑项目,所以(在我的脑海)我:使用DI(Autofac)和Identity时分开的ASP.NET项目参考

  • Data.csproj
    • 引用EF6和处理代码第一次迁移
  • 模型.csproj
    • 引用自动映射器
    • refrences数据(上图)
  • Services.csproj
    • 参考模型(上图)
  • Web.csproj
    • 引用autofac
    • 上述
  • 引用服务

但由于

  1. 身份撒都在我的Web.csproj
  2. 模型和EF引用我不能让我真正的项目的样子,当我在Web.csproj配置Autofac和尝试注册我的DbContexts以及其他项目中的其他依赖项,我需要访问具体的类型,因此在Web中设置DI时,Web需要引用所有其他项目?

这是一个由ASP .NET模板自动生成的全新项目。谢谢。

+0

我的观点2涉及到:http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application,所以我猜这是可以的所有程序集引用的Web,因为那是组成的根? – Ali

回答

0
  1. 通常,您可以通过不在Web项目中引用数据模型来避免将实体框架污染到您的Web代码中。 例如,如果您将模型的接口放置在单独的基础架构项目中,则不会再有这个问题。您的'服务'可以返回不依赖于EF的抽象类型,并减少耦合。

  2. 就我个人而言,我喜欢用一个单独的项目来解决这个问题,该项目负责工厂代码或者(甚至更好的IMO),为每个项目负责构建自己的对象。将工厂代码放在同一个地方可以进一步减少耦合,并且可以使重构变得更容易。

一件事...

如果这是一个新的项目,为什么你甚至不需要一个DI容器。当你对自己的需求有更好的了解时,你总是可以使用穷人的依赖注入并重构。他们经常过度使用或用作拐杖来隐藏过于复杂的lasagna code。这是一种令人难以置信的有用和强大的技术,但灵活性的大部分好处也可以通过设计良好的工厂和建设者来实现。这些可以提高可读性的额外好处。

+0

我想我需要一些更具体的参考来介绍如何将ASP NET身份数据和应用程序上下文移动到自己的项目中。还有如何将Autofac启动代码移动到Web UI之外的独立项目 - 如果这是您的建议。 – Ali