Выделение контроллеров Web API из основного приложения ASP .NET - PullRequest
2 голосов
/ 07 июня 2019

У меня есть устаревшее приложение, написанное на веб-формах и VB .NET.Я сыт по горло этой комбинацией, поэтому я пытаюсь написать новую функциональность в контроллерах Web API вместо обработчиков ashx.Хорошо для меня.Я также предпочитаю C #, поэтому я пытаюсь загрузить свои действия контроллера из библиотеки C # вместо записи их в VB .NET.

Я попытался сделать следующее:

  1. ИспользованиеMapRoute для присвоения имени сборке для загрузки (не могу этого сделать, может видеть только MapHttpRoute, MapRoute недоступен. MapHttpRoute не имеет опции сборки)
  2. Напишите мой собственный распознаватель сборок для загрузки другой библиотеки 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

Я получаю сообщение об ошибке: «Интерфейс IAssembliesResolver не реализован этим классом».

Какой самый простой способ загрузить мои контроллеры API из отдельного проекта?Основной проект находится в VB .NET, проект, который я загружаю, находится в C #.

РЕДАКТИРОВАТЬ: Проблема усложняется макетом в данный момент.Для простоты oldyuck - это веб-форма / vb .net, а newfast - новый проект на C #.

oldyuck - основной устаревший проект.У него огромный монолитный класс, который делает все.Это создается как огромный объект, который делает все.Это также пародия на Web Forms / VB .NET.newfast - это мой C # API Controller проект.Ему нужен огромный монолитный объект от oldyuck, чтобы что-то делать с базой данных и т. Д.

newfast может зависеть от oldyuck, а затем я могу зависеть от огромного объекта, создавать его экземпляры и т. Д., Но он не заводитсяв папке / bin / при сборке oldyuck.

oldyuck может зависеть от newfast, и тогда он окажется в папке / bin /.Но в этой настройке newfast не может зависеть от объекта бога от oldyuck, поэтому он не может использовать этот код, и, похоже, нет способа передать этот объект ему.

Я застрял.Помощь: (

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Я не уверен, правильно ли я понял, но для меня это выглядит просто как ссылка. Если это так, это можно легко решить, создав третий проект, например GodClassLibrary, который содержит класс God.

Класс God затем удаляется из Oldyuck, и Oldyuck получает ссылку на GodClassLibrary.

И NewFast также получает ссылку на GodClassLibrary.

При компиляции оба имеют свою копию GodClassLibrary в своих соответствующих папках bin и могут использовать устаревший код.

0 голосов
/ 10 июня 2019

Хотя может быть возможно использование кода C # Web Api внутри приложения Web Forms или наоборот, его, вероятно, будет сложно поддерживать или труднее понять для всех разработчиков, которые приходят за вами. Я бы предложил разбить его на два отдельных приложения.

Когда речь заходит о рефакторинге монолита и работе с библиотеками кода в нескольких структурах или парадигмах, нет единственного правильного или неправильного ответа, но я думаю, что будет полезно рассмотреть, хотите ли вы поделиться Кодом или государство .

Совместное использование кода относительно просто, у вас не должно быть проблем со ссылками на oldyuck как на зависимость проекта от newfast, и все готово. Обновите процесс сборки и развертывания для работы с 2 приложениями и вызова newfast, возможно, через jQuery напрямую с клиента.

Состояние обмена может быть намного сложнее. Если ваш класс God поддерживает много состояний в ASP.NET Session, вам нужно найти способ поделиться им. Взгляните на этот вопрос , чтобы найти возможные решения. Однако может быть проще обеспечить постоянство базы данных и передать ключи для доступа к данным.

...