C# 从主ASP.NET应用程序中拆分Web API控制器
我有一个用Web窗体和VB.NET编写的遗留应用程序。我受够了这种组合,所以我尝试在WebAPI控制器中编写新的功能,而不是ashx处理程序。对我有好处。我也更喜欢C#,因此我尝试从C#库加载控制器操作,而不是在VB.NET中编写它们 我已尝试做以下工作:C# 从主ASP.NET应用程序中拆分Web API控制器,c#,vb.net,asp.net-web-api2,C#,Vb.net,Asp.net Web Api2,我有一个用Web窗体和VB.NET编写的遗留应用程序。我受够了这种组合,所以我尝试在WebAPI控制器中编写新的功能,而不是ashx处理程序。对我有好处。我也更喜欢C#,因此我尝试从C#库加载控制器操作,而不是在VB.NET中编写它们 我已尝试做以下工作: 使用MapRoute命名要从中加载的程序集(无法执行此操作,只能查看MapHttpRoute,MapRoute不可用。MapHttpRoute没有程序集选项) 编写自己的程序集解析器以在运行时加载其他项目DLL。这也不行,VB NET抱怨我使
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
我得到的错误是“该类未实现接口iAssemblisResolver”
从单独的项目加载API控制器的最简单方法是什么?主项目在VB.NET中,我正在加载的项目在C#中
编辑:目前的布局使问题变得复杂。为了简单起见,oldyuck是WebForms/vb.net,newfast是新的C#项目
oldyuck是主要的遗留项目。它有一个巨大的整体类,可以做任何事情。它被实例化为一个执行所有操作的大型对象。这也是一个Web窗体/VB.NET的讽刺。
newfast是我的C#API控制器项目。它需要来自oldyuck的巨大单片对象来对数据库等执行任何操作
newfast可以依赖于oldyuck,然后我可以依赖于这个巨大的对象,并实例化它,等等,但是当oldyuck构建时,它不会出现在/bin/文件夹中
oldyuck可以依赖于newfast,然后它将在/bin/文件夹中结束。但是在这个设置中,newfast不能依赖oldyuck中的god对象,因此它不能使用任何代码,而且似乎没有一种方法可以将该对象传递给它
我卡住了。帮助:(虽然可以在Web表单应用程序中使用C#Web Api代码,反之亦然,但对于您之后的任何开发人员来说,这可能很难维护或理解。我建议将其分解为两个独立的应用程序
当重构一个整块并在多个框架或范例中使用代码库时,没有一个正确的或错误的答案,但我认为,如果想共享<强>代码>或<强>状态> 共享代码相对简单,将oldyuck作为newfast和away you go的项目依赖项引用应该没有问题。更新构建和部署过程以使用2个应用程序,并调用newfast,可能直接从客户端通过jQuery
共享状态可能要困难得多。如果您的god类在ASP.NET会话中维护了很多状态,那么您需要找到一些方法来共享它。请查看一些可能的解决方案。但是,强制对数据库执行持久性并传递密钥以访问数据可能更简单。我不确定我是否理解正确,但请我觉得这就像一个参考问题。如果是这样的话,可以通过创建第三个项目来轻松解决,比如说包含God类的GodClassLibrary 然后从Oldyuck中删除God类,Oldyuck获得对GodClassLibrary的引用 NewFast还获得了对GodClassLibrary的引用
现在编译时,两个库都在各自的bin文件夹中有GodClassLibrary副本,并且可以使用遗留代码。这是一个好主意,我将在下次工作时尝试此方法。感谢帮助:)