Трассировка использования типа
От: Jericho113 Украина  
Дата: 16.01.20 14:52
Оценка:
День добрый всем,

Вобщем никак не могу найти ничего подобного и честно говоня не знаю как такую тулу назвать.
Есть Full framework .net солюшен в 19 студии порядка 50 проектов
Некоторые проекты это независимые сервисы которые ссылаются на одни и те же общие проекты с логикой.
Грубо говоря два независимо деплоящихся сервиса ссылаются на один и тот же проект с бизнес логикой
-- Service1.csproj — > BusinessLogic.csproj
-- Service2.scproj — > BusinessLogic.csproj

В проекте
BusinessLogic.csproj есть очень много классов которые ссылаются один на другого (нет циклических ссылок просто в конструкторе получают инстанс зависимости)
Type1.cs -> Type2.cs -> Type3.cs -> Type000.cs
XType10.cs -> XType11.cs ->Type000.cs-> XType12.cs — > Type001.cs

Классы верхнего уровня Type1.cs и XType10.cs могут используются как в Service1 так и в Service2
Вопрос
Каким образом я могу понять что Type000.cs используется в Service1 или же в Service2 ?
Т.е. мне нужно как то оттрассировать что через какую-либо цепочку вызовов Type000 опосредованно используется (вызывается) в Service1 или Service2 ?

Заранее прошу простить за некоторую сумбурность изложения.
NetDigitally yours ....
.net
Re: Трассировка использования типа
От: Muxa  
Дата: 16.01.20 15:54
Оценка:
Если на нижнем уровне бизнес логики тебе важно знать что происходит наверху, значит ты делаешь что-то нитак.

if (System.AppDomain.CurrentDomain.FriendlyName == "Service1.exe")
{
  ///
}
else if (System.AppDomain.CurrentDomain.FriendlyName == "Service2.exe")
{
  ///
}


А вообще, как вариант, в проекте BusinessLogic объявляешь какой-нибудь интерфэйс
interface IServiceCallbacks
{
  void Callback0();
  void Callback1();
  ///
}


В проектах сервисов реализуешь его и пропихиваешь инстанс в бизнес логику.
Отредактировано 16.01.2020 16:03 Muxa . Предыдущая версия .
Re[2]: Трассировка использования типа
От: Jericho113 Украина  
Дата: 16.01.20 16:22
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Если на нижнем уровне бизнес логики тебе важно знать что происходит наверху, значит ты делаешь что-то нитак.

Конечно что то совсем НЕ так.
Но это делал к счастью не я а легион загорелых кодеров из "солнечной страны с веселыми танцами".
А к сожалению я должен в этом разобраться что бы понять что можно выбрасывать из кода без жалости дабы расцепить код и вынести сервисы в свой отдельный репозиторий.

M>А вообще, как вариант, в проекте BusinessLogic объявляешь какой-нибудь интерфэйс

M>В проектах сервисов реализуешь его и пропихиваешь инстанс в бизнес логику.
Спасибо.. я понял ваш подход но для начала мне нужно идентифицировать
то что конкретный тип никак не используется ни в какой цепочке вызовов инициированной кодом в отдельном сервисе .
NetDigitally yours ....
Re: Трассировка использования типа
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 16.01.20 17:52
Оценка:
Здравствуйте, Jericho113, Вы писали:


J>Каким образом я могу понять что Type000.cs используется в Service1 или же в Service2 ?

А типы конструируются явно или каким-нибудь компонентным контейнером. Если явно, то можно воспользоваться фичей value tracking в ReSharper-e.
Если нет, то можно написать несложный плагин, который пробежится по коду.
Re[2]: Трассировка использования типа
От: Jericho113 Украина  
Дата: 16.01.20 18:00
Оценка:
Здравствуйте, qxWork, Вы писали:


W>А типы конструируются явно или каким-нибудь компонентным контейнером. Если явно, то можно воспользоваться фичей value tracking в ReSharper-e.

Типы конструирутюся явно как показано ниже.. DI есть но он не настроен в большинстве сервисов и это одна из моих задачь
Спасибо за ссылку посмотрю обязательно!

public class TypeXX01
public void Methot1()
{
  var svc1= new TypeZ01();
}
NetDigitally yours ....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.