Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
为什么网络上的所有asp.net mvc示例都引用UI中的DAL_Asp.net_Asp.net Mvc_Architecture - Fatal编程技术网

为什么网络上的所有asp.net mvc示例都引用UI中的DAL

为什么网络上的所有asp.net mvc示例都引用UI中的DAL,asp.net,asp.net-mvc,architecture,Asp.net,Asp.net Mvc,Architecture,也许我完全弄错了,但在我工作过的所有公司中,我们从未在UI层(winforms Web)中添加对Dal的引用 我是web新手,但是一名经验丰富的WinFormWCF开发人员,但是我正在努力解决在UI中引用dal的概念 在一个没有适当监督的大团队中,这是一场灾难 为什么没有两个合成根呢 1)WebUI just services classes (not wcf) when using wcf composition root is in there 2)within the service

也许我完全弄错了,但在我工作过的所有公司中,我们从未在UI层(winforms Web)中添加对Dal的引用 我是web新手,但是一名经验丰富的WinFormWCF开发人员,但是我正在努力解决在UI中引用dal的概念

在一个没有适当监督的大团队中,这是一场灾难

为什么没有两个合成根呢

 1)WebUI just services classes (not wcf) when using wcf composition root is in there

 2)within the services that we inject there the repository.
我是否错过了显而易见的事情

谢谢

更新


在我看到的所有示例中,它们都使用DI(Unity Autofac Nject等),并且它们通过接口连接存储库,这也需要具体的类,因此需要对DAL的引用。这可以在服务层中完成吗?

有一种方法可以在不从UI引用数据访问层的情况下注入依赖项。您必须添加一个横向Utils或Helpers项目,该项目将解决整个项目中的所有依赖关系

在这个解释中,我将使用Unity表示DI。我将分两步介绍您的解决方案:

首先,创建一个Utils项目。该项目将横向于所有层。使用IUnityContainer的扩展方法添加此静态类:

// This class will resolve all dependencies across the project
public static class DependencyResolver
{
    // This method will resolve all dependencies
    public static void ResolveDependencies(this IUnityContainer container)
    {
        container.ResolveBusinessLayerDependencies();
        container.ResolveDataAccessLayerDependencies();
    }
}
这将迫使您在容器中创建两个方法:ResolveBusinessLayerDependencies和ResolveDataAccessLayerDependencies

其次,您应该转到业务逻辑项目(在这里,您应该能够访问该层的接口和实现)。添加一个新的静态类,如下所示:

public static class DependencyResolver
{
    public static void ResolveBusinessLayerDependencies(this IUnityContainer container)
    {
        container.RegisterType<IBusinessLayerClass, BusinessLayerClass>();
    }
}

这是我发现使用DI而不引用主项目中的所有层很有用的一种方法

有一种方法可以注入依赖项而不引用UI中的数据访问层。您必须添加一个横向Utils或Helpers项目,该项目将解决整个项目中的所有依赖关系

在这个解释中,我将使用Unity表示DI。我将分两步介绍您的解决方案:

首先,创建一个Utils项目。该项目将横向于所有层。使用IUnityContainer的扩展方法添加此静态类:

// This class will resolve all dependencies across the project
public static class DependencyResolver
{
    // This method will resolve all dependencies
    public static void ResolveDependencies(this IUnityContainer container)
    {
        container.ResolveBusinessLayerDependencies();
        container.ResolveDataAccessLayerDependencies();
    }
}
这将迫使您在容器中创建两个方法:ResolveBusinessLayerDependencies和ResolveDataAccessLayerDependencies

其次,您应该转到业务逻辑项目(在这里,您应该能够访问该层的接口和实现)。添加一个新的静态类,如下所示:

public static class DependencyResolver
{
    public static void ResolveBusinessLayerDependencies(this IUnityContainer container)
    {
        container.RegisterType<IBusinessLayerClass, BusinessLayerClass>();
    }
}

这是我发现使用DI而不引用主项目中的所有层的一种有用方法,因为它们是示例而不是生产代码。在示例代码中使用DI会导致完全混淆,除非它实际上是DI/存储库示例。感谢您的时间和回复。我已经更新了这个问题。是的,他们都使用DI,为了设置它,需要引用dal。这个设置可以在服务层等中完成吗?如果您使用DI,它不能在服务层中完成,因为在应用程序启动时注册的所有依赖项基本上都会初始化MVC(UI)应用程序。顺便说一下,具体的服务实现也可能被注入。在这种情况下,您通常会通过构造函数注入将存储库传递给控制器。因此,对于简单的DI MVC,您必须在UI层中执行此操作,因为这是控制器所在的位置。最终你会得到一个“视情况而定”的答案。做事情的方法有很多种,但正如您所说,我们这里讨论的是示例代码,因此它们通常基于演示特定概念,而不一定是最佳实践。让我们谈谈“真实世界”如果我理解你的意思,因为当你初始化MVC应用程序时,合成根发生了,你必须引用DAL来注入存储库(DI)结论正因为如此,在实际项目中,在mvc UI中引用DAL已成为一种标准做法,开发人员不能直接使用DAL.mmmmmbe,因为它们是示例而不是生产代码。在示例代码中使用DI会导致完全混淆,除非它实际上是DI/存储库示例。感谢您的时间和回复。我已经更新了这个问题。是的,他们都使用DI,为了设置它,需要引用dal。这个设置可以在服务层等中完成吗?如果您使用DI,它不能在服务层中完成,因为在应用程序启动时注册的所有依赖项基本上都会初始化MVC(UI)应用程序。顺便说一下,具体的服务实现也可能被注入。在这种情况下,您通常会通过构造函数注入将存储库传递给控制器。因此,对于简单的DI MVC,您必须在UI层中执行此操作,因为这是控制器所在的位置。最终你会得到一个“视情况而定”的答案。做事情的方法有很多种,但正如您所说,我们这里讨论的是示例代码,因此它们通常基于演示特定概念,而不一定是最佳实践。让我们谈谈“真实世界”如果我理解你的意思,因为当你初始化MVC应用程序时,合成根发生了,你必须引用DAL来注入存储库(DI).结论正因为如此,在mvc UI中引用DAL已成为现实项目中的标准做法,而直接使用DAL则取决于开发人员。MMMMM这是有意义的,我喜欢使用其他人可以调用的dll这是有意义的,我喜欢使用其他人可以调用的dll这一事实