c# - 从主 ASP .NET 应用程序中分离出 Web API Controller

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

我有一个用 Web 窗体和 VB .NET 编写的遗留应用程序。我厌倦了这种组合,所以我试图在 Web API Controller 而不是 ashx 处理程序中编写新功能。对我好。我也更喜欢 C#,所以我尝试从 C# 库加载我的 Controller 操作,而不是在 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

我收到的错误是“此类未实现接口(interface) IAssembliesResolver”。

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

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

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

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

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

我卡住了。帮助:(

最佳答案

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

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

并且 NewFast 还获得了对 GodClassLibrary 的引用。

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

关于c# - 从主 ASP .NET 应用程序中分离出 Web API Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56487854/

相关文章:

vb.net - 使用 VB.net 发送电子邮件

c# - IHttpActionResult 与异步任务<IHttpActionResult>

azure - HTTP 响应是 404 而不是 401 与authorization.json 我错过了什么吗?

facebook - 在 Web API 中返回 401 Facebook 登录

c# - .NET 如何在 Azure Windows Server 2012 上解密来自 AT&T gophone 的短信

c# - 如何从作为 listBoxItem 的 stackpanel 访问标签

c# - 用于 x86/x64 架构的 SQLite dll

c# - 正则表达式匹配错误的模式

c# - 如何在 C# TCP/IP 中的 Socket.Connect 中传递用户名和密码

asp.net - 避免为每个转发器重新加载所有 XML 数据 - vb.net