Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从主ASP.NET应用程序中拆分Web API控制器_C#_Vb.net_Asp.net Web Api2 - Fatal编程技术网

C# 从主ASP.NET应用程序中拆分Web API控制器

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抱怨我使

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

我已尝试做以下工作:

  • 使用MapRoute命名要从中加载的程序集(无法执行此操作,只能查看MapHttpRoute,MapRoute不可用。MapHttpRoute没有程序集选项)
  • 编写自己的程序集解析器以在运行时加载其他项目DLL。这也不行,VB NET抱怨我使用的代码没有正确实现GetAssembly
  • 这是我尝试使用的代码:

        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副本,并且可以使用遗留代码。

    这是一个好主意,我将在下次工作时尝试此方法。感谢帮助:)