我有一个用 Web 窗体和 VB .NET 编写的遗留应用程序。我厌倦了这种组合,所以我试图在 Web API Controller 而不是 ashx 处理程序中编写新功能。对我好。我也更喜欢 C#,所以我尝试从 C# 库加载我的 Controller 操作,而不是在 VB .NET 中编写它们。
我已尝试执行以下操作:
- 使用 MapRoute 命名要加载的程序集(不能这样做,只能看到 MapHttpRoute,MapRoute 不可用。MapHttpRoute 没有程序集选项)
- 编写我自己的程序集解析器以在运行时加载我的其他项目 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/