Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
使用DI(Autofac)和Identity时,单独的ASP.NET项目引用_Asp.net_Asp.net Mvc_Asp.net Identity_Autofac - Fatal编程技术网

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

使用DI(Autofac)和Identity时,单独的ASP.NET项目引用,asp.net,asp.net-mvc,asp.net-identity,autofac,Asp.net,Asp.net Mvc,Asp.net Identity,Autofac,我想分开我的ASP。NET MVC 5+WebApi2解决方案分为不同的逻辑项目,因此(在我的脑海中)我有: Data.csproj 引用EF6并处理代码优先迁移 Models.csproj 引用自动映射器 参考数据(如上) 服务.csproj 参考模型(如上) Web.csproj 参考autofac 参考上述服务 但我不能让我真正的项目看起来像那样,因为 Identity将模型和EF引用散布在my Web.csproj中 当我在Web.csproj中配置Autofac并尝

我想分开我的ASP。NET MVC 5+WebApi2解决方案分为不同的逻辑项目,因此(在我的脑海中)我有:

  • Data.csproj
    • 引用EF6并处理代码优先迁移
  • Models.csproj
    • 引用自动映射器
    • 参考数据(如上)
  • 服务.csproj
    • 参考模型(如上)
  • Web.csproj
    • 参考autofac
    • 参考上述服务
但我不能让我真正的项目看起来像那样,因为

  • Identity将模型和EF引用散布在my Web.csproj中
  • 当我在Web.csproj中配置Autofac并尝试注册我的DbContext和其他项目中的任何其他依赖项时,我需要访问具体类型,因此Web需要引用所有其他项目,因为DI是在Web中设置的 这是一个由ASP.NET模板自动生成的全新项目。谢谢

  • 通常,通过在web项目中不引用数据模型,可以避免将实体框架污染引入web代码。 例如,如果您将模型的接口放在一个单独的基础设施项目中,您就不会再有这个问题了。您的“服务”可以返回抽象类型,而不依赖于EF,并且减少了耦合

  • 就个人而言,我喜欢通过一个单独的项目来解决这个问题,该项目负责工厂代码,或者(更好的是,IMO)让每个项目负责构建自己的对象。将工厂代码放在同一位置可以进一步减少耦合,使重构更容易

  • 还有一件事


    如果这是一个新项目,为什么还要使用DI容器呢。当您更好地了解自己的需求时,您可以随时使用穷人的依赖注入和重构。它们经常被过度使用或用作拐杖来隐藏过于复杂的信息。这是一项非常有用且功能强大的技术,但灵活性方面的大部分好处也可以通过精心设计的工厂和建筑商来实现。这些可以增加可读性的额外好处。

    我想我需要一些更具体的参考资料,以了解如何将ASP NET标识数据和应用程序上下文移动到自己的项目中。还有如何将Autofac启动代码移动到Web UI之外的单独项目中——如果这是您的建议的话。我的第2点与:,所以我想让Web引用所有程序集是可以的,因为这是组合根?