我有一个用Web窗体和VB .NET编写的旧应用程序。我对这种组合感到厌烦,所以我试图在Web API控制器而不是ashx处理程序中编写新功能。对我好。我也更喜欢C#,所以我试图从C#库加载控制器动作,而不是在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控制器的最简单方法是什么?主要项目在VB .NET中,我正在加载的项目在C#中。
编辑:目前的布局使问题变得复杂。为简单起见,oldyuck是Web表单/ vb .net事物,而newfast是新的C#项目。
oldyuck是主要的遗留项目。它有一个庞大的整体类,可以完成所有工作。实例化为一个无所不能的巨大对象。这也是Web Forms / VB .NET的麻烦。
newfast是我的C#API控制器项目。它需要来自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/