【问题标题】:Split Web API controllers out from main ASP .NET application从主 ASP .NET 应用程序中拆分 Web API 控制器
【发布时间】:2019-06-07 04:13:05
【问题描述】:

我有一个用 Web 窗体和 VB .NET 编写的遗留应用程序。我已经厌倦了这种组合,所以我尝试在 Web API 控制器而不是 ashx 处理程序中编写新功能。对我好。我也更喜欢 C#,因此我尝试从 C# 库中加载我的控制器操作,而不是在 VB .NET 中编写它们。

我已尝试执行以下操作:

  1. 使用 MapRoute 命名要从中加载的程序集(不能这样做,只能看到 MapHttpRoute,MapRoute 不可用。MapHttpRoute 没有程序集选项)
    1. 编写我自己的程序集解析器以在运行时加载我的其他项目 DLL。这也不起作用,VB NET 抱怨我使用的代码没有正确实现 GetAssemblies。

这是我尝试使用的代码:

    Public Class CustomAssemblyResolver
    Inherits IAssembliesResolver

    Public Function IAssembliesResolver_GetAssemblies() As ICollection(Of Assembly) Implements IAssembliesResolver.GetAssemblies
        Dim baseAssemblies As List(Of Assembly) = AppDomain.CurrentDomain.GetAssemblies().ToList()
        Dim controllersAssembly = Assembly.LoadFrom("APIControllers.dll")
        baseAssemblies.Add(controllersAssembly)
        Return baseAssemblies
        'Throw New NotImplementedException
    End Function
End Class

我得到的错误是“接口 IAssembliesResolver 没有被这个类实现”。

从单独的项目中加载我的 API 控制器的最简单方法是什么?主项目是VB .NET,我正在加载的项目是C#。

编辑:目前的布局使问题变得复杂。为简单起见,oldyuck 是 web forms/vb .net 的东西,newfast 是新的 C# 项目。

oldyuck 是主要的遗留项目。它有一个巨大的单体类,可以做所有事情。这被实例化为一个可以做所有事情的巨大对象。它也是对 Web 窗体/VB .NET 的讽刺。 newfast 是我的 C# API 控制器项目。它需要来自 oldyuck 的巨大单体对象来对数据库等进行任何操作。

newfast 可以依赖 oldyuck,然后我可以依赖巨大的对象,并实例化它等等,但是当 oldyuck 构建时它不会在 /bin/ 文件夹中结束。

oldyuck 可以依赖 newfast,然后它会在 /bin/ 文件夹中结束。但是在这个设置中,newfast 不能依赖 oldyuck 的 God 对象,所以它不能使用任何代码,而且似乎没有办法将该对象传递给它。

我被困住了。帮助:(

【问题讨论】:

    标签: c# vb.net asp.net-web-api2


    【解决方案1】:

    我不确定我是否理解正确,但对我来说它看起来就像一个参考问题。如果是这种情况,可以通过创建第三个项目轻松解决,比如包含 God 类的 GodClassLibrary。

    然后从 Oldyuck 中删除 God 类,并且 Oldyuck 获得对 GodClassLibrary 的引用。

    NewFast 还获得了对 GodClassLibrary 的引用。

    现在编译后,两者的 GodClassLibrary 副本都在各自的 bin 文件夹中,并且可以使用旧代码。

    【讨论】:

    • 这是个好主意,我下次上班的时候试试这个。感谢您的帮助:)
    【解决方案2】:

    虽然可能可能在 Web 窗体应用程序中使用 C# Web Api 代码,反之亦然,但对于任何追随您的开发人员来说,它可能难以维护或难以理解。我建议将其分解为两个独立的应用程序。

    在重构单体架构和在多个框架或范例中使用代码库时,没有一个正确或错误的答案,但我认为考虑是否要共享 代码

    共享代码相对简单,将 oldyuck 引用为 newfast 的项目依赖项应该没有问题,然后就可以走了。更新您的构建和部署过程以使用 2 个应用程序,并调用 newfast,可能直接从客户端通过 jQuery。

    共享状态可能要困难得多。如果你的上帝类在 ASP.NET Session 中维护了很多状态,那么你需要找到一些方法来共享它。查看this question 了解一些可能的解决方案。然而,对数据库强制执行持久性并传递密钥以访问数据可能更简单。

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2019-10-16
      • 2016-01-16
      相关资源
      最近更新 更多