使用DI(Autofac)和Identity时,单独的ASP.NET项目引用

时间:2016-01-22 14:26:10

标签: asp.net asp.net-mvc asp.net-identity autofac

我想分开我的ASP。 NET MVC 5 + WebApi2解决方案分成独立的逻辑项目,所以(在我脑海中)我有:

  • Data.csproj
    • 引用EF6并处理Code First迁移
  • Models.csproj
    • 引用Automapper
    • 参考资料(上)
  • Services.csproj
    • 参考模型(上图)
  • Web.csproj
    • 引用autofac
    • 参考上述服务

但我不能让我的真实项目看起来像那样,因为

  1. 标识在我的Web.csproj
  2. 上遍布模型和EF引用
  3. 当我在Web.csproj中配置Autofac并尝试注册我的DbContexts以及我的其他项目中的任何其他依赖项时,我将需要访问具体类型,因此Web需要在DI设置时引用所有其他项目在网上?
  4. 这是一个由ASP .NET模板自动生成的全新项目。感谢。

1 个答案:

答案 0 :(得分:0)

  1. 通常,您不会通过在Web项目中引用数据模型来避免将Entity-Framework污染到Web代码中。 例如,如果将模型的接口放在单独的基础结构项目中,则不会再出现此问题。您的“服务”可以返回抽象类型而不依赖于EF,并且耦合会减少。

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

  3. 还有一件事......

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