Как удалить lkads
Lkads.exe — это исполняемый файл (программа) для Windows. Расширение имени файла .exe — это аббревиатура от англ. слова executable — исполнимый. Необходимо запускать исполняемые файлы от проверенных производителей программ, потому что исполняемые файлы могут потенциально изменить настройки компьютера или нанести вред вашему компьютеру. Бесплатный форум с информацией о файлах может помочь вам разобраться является ли lkads.exe вирусом, трояном, программой-шпионом, рекламой, которую вы можете удалить, или файл принадлежит системе Windows или приложению, которому можно доверять.
Вот так, вы сможете исправить ошибки, связанные с lkads.exe
- Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
- Обновите программу Part of Logos. Обновление можно найти на сайте производителя (ссылка приведена ниже).
- В следующих пунктах предоставлено описание работы lkads.exe.
Информация о файле lkads.exe
Описание: lkads.exe не является важным для Windows и часто вызывает проблемы. Lkads.exe находится в подпапках C:\Windows. Известны следующие размеры файла для Windows 10/11/7 53,544 байт (24% всех случаев), 50,328 байт и еще 9 варианта .
Название сервиса — lkClassAds.
Это не файл Windows. Приложение не видно пользователям. Это файл, подписанный Verisign. Нет более детального описания программы. Процесс можно удалить, используя панель инструментов Добавить\Удалить программу. Процесс использует порт, чтобы присоединится к сети или интернету. У файла поставлена цифровая подпись. Поэтому технический рейтинг надежности 45% опасности.
Разработчик NI предоставляет сайт поддержки для помощи, и деинсталлятор (Панель управления ⇒ Установка и удаление программ ⇒ lkads или www.ni.com/support/).
Если lkads.exe находится в папке C:\Windows\System32, тогда рейтинг надежности 36% опасности. Размер файла 40,488 байт (30% всех случаев), 50,328 байт и еще 5 варианта . У процесса нет видимого окна. Это не системный процесс Windows. У файла поставлена цифровая подпись. Это файл, подписанный Verisign. Нет информации по файлу. Процесс можно удалить, используя панель инструментов Добавить\Удалить программу. Процесс слушает или шлет данные на открытые порты в сети или по интернету.
Разработчик NI предоставляет сайт поддержки для помощи, и деинсталлятор (Панель управления ⇒ Установка и удаление программ ⇒ lkads).
Важно: Некоторые вредоносные программы маскируют себя как lkads.exe, особенно, если они расположены в каталоге c:\windows или c:\windows\system32. Таким образом, вы должны проверить файл lkads.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.
Комментарий пользователя
| lkads.exe — часть пакета LabView компании National Instruments. Возможно, входит и в другие их программы. На их сайте (см. ссылку) они пишут, что он штатно связывается с интернетом и рекомендуют разрешить это соединение для работы LabView. (дополнительная информация) Александр |
| National Instruments, т.е. файл из состава LabView 2010 Lockfile |
| lkads.exe — появление этого процесса связано с установкой программ от компании National Instruments Corp.D частности после установки Multisim 11. OIeg |
Итого: Средняя оценка пользователей сайта о файле lkads.exe: — на основе 3 голосов с 3 отзывами.
35 пользователей спрашивали про этот файл. Один пользователь оценил, как представляется нужным. 2 пользователей оценили, как нейтрально.
Лучшие практики для исправления проблем с lkads
Аккуратный и опрятный компьютер — это главное требование для избежания проблем с lkads. Для этого требуется регулярная проверка компьютера на вирусы, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые больше не нужны, проверка программ, которые запускаются при старте Windows (используя msconfig) и активация Автоматическое обновление Windows. Всегда помните о создании периодических бэкапов, или в крайнем случае о создании точек восстановления.
Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
Следующие программы могут вам помочь для анализа процесса lkads.exe на вашем компьютере: Security Task Manager отображает все запущенные задания Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записей автозагрузки. Уникальная оценка рисков безопасности указывает на вероятность процесса быть потенциально опасным — шпионской программой, вирусом или трояном. Malwarebytes Anti-Malware определяет и удаляет бездействующие программы-шпионы, рекламное ПО, трояны, кейлоггеры, вредоносные программы и трекеры с вашего жесткого диска.
lkads сканер
Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
Инструмент ремонта ПК бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.
Как удалить nisvcloc
Подлинный файл является одним из компонентов программного обеспечения National Instruments LabView, разработанного National Instruments .
NISvcLoc — это аббревиатура от National Instruments Service Locator
Nisvcloc.exe — это исполняемый файл (программа) для Windows. Расширение имени файла .exe — это аббревиатура от англ. слова executable — исполнимый. Необходимо запускать исполняемые файлы от проверенных производителей программ, потому что исполняемые файлы могут потенциально изменить настройки компьютера или нанести вред вашему компьютеру. Бесплатный форум с информацией о файлах может помочь вам разобраться является ли nisvcloc.exe вирусом, трояном, программой-шпионом, рекламой, которую вы можете удалить, или файл принадлежит системе Windows или приложению, которому можно доверять.
Вот так, вы сможете исправить ошибки, связанные с nisvcloc.exe
- Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
- Обновите программу NI Service Locator. Обновление можно найти на сайте производителя (ссылка приведена ниже).
- В следующих пунктах предоставлено описание работы nisvcloc.exe.
Информация о файле nisvcloc.exe
Описание: nisvcloc.exe не является важным для Windows и часто вызывает проблемы. Nisvcloc.exe находится в подпапках C:\Windows. Известны следующие размеры файла для Windows 10/11/7 49,152 байт (75% всех случаев) или 8,656 байт.
У процесса нет видимого окна. Это не системный файл Windows. Процесс использует порт, чтобы присоединится к сети или интернету. Поэтому технический рейтинг надежности 51% опасности.
Разработчик NI предоставляет сайт поддержки для помощи, и деинсталлятор (Панель управления ⇒ Установка и удаление программ ⇒ www.ni.com/support/ или NITestingCert).
Если nisvcloc.exe находится в подпапках «C:\Program Files», тогда рейтинг надежности 29% опасности. Размер файла 102,512 байт (33% всех случаев), 89,928 байт или 90,440 байт. Это файл, подписанный Verisign. Это не системный процесс Windows. Процесс слушает или шлет данные на открытые порты в сети или по интернету. Процесс можно деинсталлировать из панели инструментов. Поставлена цифровая подпись. Приложение не видно пользователям. Может менять поведение других программ или манипулировать другими программами.
Разработчик NI предоставляет сайт поддержки для помощи, и деинсталлятор (Панель управления ⇒ Установка и удаление программ ⇒ NI Service Locator).
Если nisvcloc.exe находится в папке C:\Windows\System32, тогда рейтинг надежности 40% опасности. Размер файла 8,656 байт. Поставлена цифровая подпись. Это не файл Windows. Процесс можно деинсталлировать из панели инструментов. Процесс слушает или шлет данные на открытые порты в сети или по интернету. У процесса нет видимого окна.
Разработчик NI предоставляет сайт поддержки для помощи, и деинсталлятор (Панель управления ⇒ Установка и удаление программ ⇒ NITestingCert).
Важно: Некоторые вредоносные программы маскируют себя как nisvcloc.exe. Таким образом, вы должны проверить файл nisvcloc.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.
Комментарий пользователя
| NI MultiSim это его типа (дополнительная информация) Erlk |
| NI MultiSim это его типа (дополнительная информация) Erlk |
Итого: Средняя оценка пользователей сайта о файле nisvcloc.exe: — на основе 2 голосов с 2 отзывами.
41 пользователей спрашивали про этот файл. 2 пользователей оценили, как нейтрально.
Лучшие практики для исправления проблем с nisvcloc
Аккуратный и опрятный компьютер — это главное требование для избежания проблем с nisvcloc. Для этого требуется регулярная проверка компьютера на вирусы, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые больше не нужны, проверка программ, которые запускаются при старте Windows (используя msconfig) и активация Автоматическое обновление Windows. Всегда помните о создании периодических бэкапов, или в крайнем случае о создании точек восстановления.
Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
Следующие программы могут вам помочь для анализа процесса nisvcloc.exe на вашем компьютере: Security Task Manager отображает все запущенные задания Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записей автозагрузки. Уникальная оценка рисков безопасности указывает на вероятность процесса быть потенциально опасным — шпионской программой, вирусом или трояном. Malwarebytes Anti-Malware определяет и удаляет бездействующие программы-шпионы, рекламное ПО, трояны, кейлоггеры, вредоносные программы и трекеры с вашего жесткого диска.
nisvcloc сканер
Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
Инструмент ремонта ПК бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.
Ni psp service locator что это
Сообщения: 10679
Благодарности: 2891
| Конфигурация компьютера | |
| Процессор: IntelCorei3-2100 CPU @ 3.10GHz, 3100 МГц, ядер: 2, логических процессоров: 4 | |
| Материнская плата: MSI H61M-P21 (MS-7680) (B3.0) | |
| Память: Kingston 99U5471-052.A00LF 8Gb DDR3-1333 DDR3 SDRAM; Samsung M378B5773DH0-CH9 2Gb DDR3-1333 DDR3 SDRAM | |
| HDD: WDC Caviar Green WD10EARS-22Y5B1 ATA Device 1Т (1000 Gb), WDC Caviar Blue WD10EZEX-08M2NA0 ATA Device 1Т (1000 Gb) | |
| Видеокарта: Sapphire Radeon HD 6570 650Mhz PCI-E 2.1 2048Mb 1600Mhz 128 bit DVI HDMI HDCP | |
| Звук: VIA VT1708S VIA High Definition Audio | |
| Блок питания: OCZ ZS Series Power Supply 550W 2014 г. | |
| CD/DVD: ATAPI iHAS122 ATA Device | |
| Монитор: LG FLATRON E2050 1600×900 | |
| ОС: Microsoft Windows 7 Home Basic x86, Microsoft Windows 10 Home x64 . | |
| Индекс производительности Windows: 5.9 | |
| Прочее: Multi Flash Reader USB Device, Logitech HD Webcam C310 |
SoulDarkness,
В общих чертах проблема ясна, а что конкретно — нет. И теперь, чтобы не гадать, сделайте лог http://forum.oszone.net/post-2155785-20.htmlЭто не сложно и безопасно
(будут сложности, спрашивайте).
Petya V4sechkin в этом деле специалист Большой. Ошибку должен расшифровать.
——-
Будь джентльменом, если есть удача. А нет удачи, джентльменов нет . Нажми .
Сообщения: 12
Благодарности: 0
ruslan. , для этого мне нужно заново установить Daemon Tools. Я правильно понял? Ведь шибка доступа возникает при попытке зайти на виртуальный привод, когда в тот смонтирован образ.
Сообщения: 10679
Благодарности: 2891
| Конфигурация компьютера | |
| Процессор: IntelCorei3-2100 CPU @ 3.10GHz, 3100 МГц, ядер: 2, логических процессоров: 4 | |
| Материнская плата: MSI H61M-P21 (MS-7680) (B3.0) | |
| Память: Kingston 99U5471-052.A00LF 8Gb DDR3-1333 DDR3 SDRAM; Samsung M378B5773DH0-CH9 2Gb DDR3-1333 DDR3 SDRAM | |
| HDD: WDC Caviar Green WD10EARS-22Y5B1 ATA Device 1Т (1000 Gb), WDC Caviar Blue WD10EZEX-08M2NA0 ATA Device 1Т (1000 Gb) | |
| Видеокарта: Sapphire Radeon HD 6570 650Mhz PCI-E 2.1 2048Mb 1600Mhz 128 bit DVI HDMI HDCP | |
| Звук: VIA VT1708S VIA High Definition Audio | |
| Блок питания: OCZ ZS Series Power Supply 550W 2014 г. | |
| CD/DVD: ATAPI iHAS122 ATA Device | |
| Монитор: LG FLATRON E2050 1600×900 | |
| ОС: Microsoft Windows 7 Home Basic x86, Microsoft Windows 10 Home x64 . | |
| Индекс производительности Windows: 5.9 | |
| Прочее: Multi Flash Reader USB Device, Logitech HD Webcam C310 |
SoulDarkness,
У Вас ведь отсутствует доступ и к физическому приводу, думаю этого достаточно, чтобы вызвать сообщение о том,
что у Вас не хватает полномочий.
Если не получится, тогда нужно установить Daemon Tools.
——-
Будь джентльменом, если есть удача. А нет удачи, джентльменов нет . Нажми .
Последний раз редактировалось ruslan. 25-05-2013 в 01:14 .
Сообщения: 12
Благодарности: 0
Petya V4sechkin, выслал логи.
Сообщения: 53076
Благодарности: 15406
| Конфигурация компьютера | |
| Процессор: AMD Ryzen 7 7800X3D | |
| Материнская плата: Gigabyte B650E Aorus Master | |
| Память: Kingston Fury Renegade DDR5-6000 32GB (2×16) | |
| HDD: Samsung SSD 850 PRO 256GB, 980 PRO 1TB | |
| Видеокарта: Gainward GeForce RTX 3080 追风 | |
| Блок питания: be quiet! Straight Power 11 650W | |
| Монитор: ASUS VG248QE 24″ | |
| ОС: Windows 10 Pro x64 | |
| Прочее: корпус Fractal Design Define R4 |
SoulDarkness, наблюдается ли проблема под другой учетной записью?
К сожалению, я не могу угадать, какое ваше программное обеспечение блокирует доступ (ибо не экстрасенс). Выяснить это можете только вы сами. Для начала:
Цитата Petya V4sechkin:
| попробуйте удалить Sandboxie и ESET |
Далее смотрите список сторонних служб:
R2 ABBYY.Licensing.FineReader.Professional.10.0;ABBYY FineReader 10 PE Licensing Service; C:\Program Files (x86)\Common Files\ABBYY\FineReader\10.00\Licensing\PE\NetworkLicenseServer.exe [2009-12-22 814344] R2 AMD External Events Utility;AMD External Events Utility; C:\Windows\system32\atiesrxx.exe [2012-11-16 238080] R2 AMD FUEL Service;AMD FUEL Service; C:\Program Files\ATI Technologies\ATI.ACE\Fuel\Fuel.Service.exe [2012-11-16 361984] R2 ekrn;ESET Service; C:\Program Files\ESET\ESET NOD32 Antivirus\x86\ekrn.exe [2009-02-06 727720] R2 LkCitadelServer;NI Citadel 4 Service; C:\Windows\SysWOW64\lkcitdl.exe [2011-05-06 695136] R2 lkClassAds;NI PSP Service Locator; C:\Windows\SysWOW64\lkads.exe [2012-06-05 50328] R2 lkTimeSync;NI Time Synchronization; C:\Windows\SysWOW64\lktsrv.exe [2012-06-05 60568] R2 NIApplicationWebServer;NI Application Web Server; C:\Program Files (x86)\National Instruments\Shared\NI WebServer\ApplicationWebServer.exe [2012-05-22 53960] R2 NIDomainService;NI Domain Service; C:\Program Files (x86)\National Instruments\Shared\Security\nidmsrv.exe [2012-06-05 370328] R2 nimDNSResponder;NI mDNS Responder Service; C:\Program Files (x86)\National Instruments\Shared\mDNS Responder\nimdnsResponder.exe [2012-05-31 258776] R2 niSvcLoc;NI System Web Server; C:\Program Files (x86)\National Instruments\Shared\NI WebServer\SystemWebServer.exe [2012-05-22 53952] R2 SbieSvc;Sandboxie Service; C:\Program Files\Sandboxie\SbieSvc.exe [2012-12-16 123664] R2 TeamViewer8;TeamViewer 8; C:\Program Files (x86)\TeamViewer\Version8\TeamViewer_Service.exe [2013-04-23 3574624]
и драйверов:
R0 sptd;sptd; C:\Windows\System32\Drivers\sptd.sys [2013-05-24 564824] R1 ehdrv;ehdrv; C:\Windows\system32\DRIVERS\ehdrv.sys [2009-02-06 132464] R2 cpuz135;cpuz135; \??\C:\Windows\system32\drivers\cpuz135_x64.sys [2011-09-21 21992] R2 eamon;eamon; C:\Windows\system32\DRIVERS\eamon.sys [2009-02-06 141728] R2 epfwwfpr;epfwwfpr; C:\Windows\system32\DRIVERS\epfwwfpr.sys [2009-02-06 120128] R3 amdiox64;AMD IO Driver; C:\Windows\system32\DRIVERS\amdiox64.sys [2010-02-18 46136] R3 MTsensor;ATK0110 ACPI UTILITY; C:\Windows\system32\DRIVERS\ASACPI.sys [2005-03-29 8192] R3 SbieDrv;SbieDrv; \??\C:\Program Files\Sandboxie\SbieDrv.sys [2012-12-16 202632]
Service Locator — антипаттерн

Service Locator (или “локатор служб”) — хорошо всем нам известный паттерн. Поскольку он был описан Мартином Фаулером, он должен быть хорошим, ведь так?
К сожалению нет, на практике это классический пример антипаттерна, который следует избегать.
Давайте разберемся, что с ним не так. Если отвечать коротко, то проблема с Service Locator заключается в том, что он скрывает зависимости класса, что вызывает ошибки времени выполнения вместо ошибок времени компиляции, а также усложняет сопровождение кода, потому что становится не совсем ясно, какие изменения окажутся критическими.
Пример с OrderProcessor
Возьмем злободневный пример для всех, кто сталкивался с внедрением зависимостей: OrderProcessor. В рамках обработки заказа, OrderProcessor должен проверить заказ и, если все в порядке, отправить его на отгрузку. Вот пример реализации с использованием Service Locator:
public class OrderProcessor : IOrderProcessor < public void Process(Order order) < var validator = Locator.Resolve(); if (validator.Validate(order)) < var shipper = Locator.Resolve(); shipper.Ship(order); > > >
Service Locator используется в качестве альтернативы оператору new. Выглядит это следующим образом:
public static class Locator < private readonly static Dictionary> services = new Dictionary>(); public static void Register(Func resolver) < Locator.services[typeof(T)] = () =>resolver(); > public static T Resolve() < return (T)Locator.services[typeof(T)](); >public static void Reset() < Locator.services.Clear(); >>
Мы можем задать Locator с помощью метода Register. “Настоящая” реализация Service Locator была бы намного более усовершенствованной, чем эта, но этот пример вполне отражает суть паттерна.
Он гибок и расширяем, и даже поддерживает подмену сервисов тестовыми дублерами, как мы вскоре увидим.
Учитывая все это, в чем же подвох?
Проблемы с API
Предположим на мгновение, что мы просто являемся пользователями класса OrderProcessor. Сами мы его не писали, а получили в сборке от третьих лиц, и нам еще даже не довелось взглянуть на него в Reflector.
Вот что мы получаем от IntelliSense в Visual Studio:

Итак, у класса есть конструктор по умолчанию. Это означает, что мы можем просто создать его новый инстанс и сразу же вызвать метод Process:
var order = new Order(); var sut = new OrderProcessor(); sut.Process(order);
Но не тут-то было, запуск этого кода внезапно вызывает KeyNotFoundException, потому что IOrderValidator не был зарегистрирован нами в Locator. Это не только неожиданно, это вполне может сбить нас с толку, если у нас нет доступа к исходному коду.
Просматривая исходный код (или используя Reflector) или копаясь в документации (фе!) мы можем, наконец, обнаружить, что нам нужно зарегистрировать инстанс IOrderValidator в Locator (совершенно несвязанным статическим классом), чтобы это все заработало.
В модульном тесте это можно сделать так:
var validatorStub = new Mock(); validatorStub.Setup(v => v.Validate(order)).Returns(false); Locator.Register(() => validatorStub.Object);
Что еще более раздражает, так это то, что, поскольку внутреннее хранилище Locator статично, нам нужно вызывать метод Reset после каждого модульного теста. Но хотя бы это неудобство нас преследует в основном только в модульном тестировании.
В целом, однако, мы не можем обоснованно утверждать, что такое API способствует положительному опыту разработки.
Проблемы с сопровождением
Хоть подобное использование Service Locator с точки зрения пользователя достаточно проблематично, но то, что кажется простым, вскоре становится проблемой и для разработчика, который должен сопровождать этот код.
Допустим, нам нужно расширить поведение OrderProcessor вызовом метода IOrderCollector.Collect. Легко ли нам будет сделать это?
public void Process(Order order) < var validator = Locator.Resolve(); if (validator.Validate(order)) < var collector = Locator.Resolve(); collector.Collect(order); var shipper = Locator.Resolve(); shipper.Ship(order); > >
С чисто механистической точки зрения это легко — мы просто добавили новый вызов Locator.Resolve и вызвали IOrderCollector.Collect.
Является ли это изменение критическим?
Ответить на этот вопрос может быть на удивление трудно. Код, конечно, скомпилировался без ошибок, но один из моих модульных тестов демонстрирует ошибку. Что произойдет в рабочем приложении? Интерфейс IOrderCollector может быть уже зарегистрирован в Service Locator, поскольку он уже используется другими компонентами, и в этом случае он будет работать без сбоев. С другой стороны, дела могут обстоять немного по другому.
Суть в том, что становится намного сложнее сказать, вводите ли вы критическое изменение или нет. Вам нужно следить за всем приложением, в котором используется Service Locator, и компилятор вам в этом не поможет.
Вариация паттерна: Concrete Service Locator
Можем ли мы как-то решить эти проблемы?
Одно из самых популярных решений — сделать Service Locator конкретным классом, который используется следующим образом:
public void Process(Order order) < var locator = new Locator(); var validator = locator.Resolve(); if (validator.Validate(order)) < var shipper = locator.Resolve(); shipper.Ship(order); > >
Однако для работы ему все еще требуется статическое хранилище в памяти:
public class Locator < private readonly static Dictionary> services = new Dictionary>(); public static void Register(Func resolver) < Locator.services[typeof(T)] = () =>resolver(); > public T Resolve() < return (T)Locator.services[typeof(T)](); >public static void Reset() < Locator.services.Clear(); >>
Другими словами: нет никаких структурных различий между конкретным локатором служб и статическим локатором служб, который мы уже рассматривали. Он имеет те же проблемы и ничего не решает.
Еще одна вариация: Abstract Service Locator #
Есть еще одна вариация, которая немного ближе к настоящему внедрению зависимостей: Service Locator представляет собой конкретный класс, реализующий интерфейс.
public interface IServiceLocator < T Resolve(); > public class Locator : IServiceLocator < private readonly Dictionary> services; public Locator() < this.services = new Dictionary>(); > public void Register(Func resolver) < this.services[typeof(T)] = () =>resolver(); > public T Resolve() < return (T)this.services[typeof(T)](); >>
В этой вариации Service Locator необходимо внедрять в потребителя. Внедрение зависимостей через конструктор всегда является хорошим выбором для внедрения зависимостей, поэтому наш OrderProcessor трансформируется в следующую реализацию:
public class OrderProcessor : IOrderProcessor < private readonly IServiceLocator locator; public OrderProcessor(IServiceLocator locator) < if (locator == null) < throw new ArgumentNullException("locator"); >this.locator = locator; > public void Process(Order order) < var validator = this.locator.Resolve(); if (validator.Validate(order)) < var shipper = this.locator.Resolve(); shipper.Ship(order); > > >
Значит, теперь все хорошо?
Как разработчики, мы наконец получили небольшую помощь от IntelliSense:

Но что это нам говорит? По большому счету, не очень много чего. Итак, OrderProcessor нужен ServiceLocator — это немного больше информации, чем раньше, но мы по-прежнему не знаем, какие службы необходимы. Следующий код компилируется, но вылетает с тем же KeyNotFoundException, что и раньше:
var order = new Order(); var locator = new Locator(); var sut = new OrderProcessor(locator); sut.Process(order);
С точки зрения разработчика, которому нужно будет сопровождать этот код, ситуация также не сильно улучшилась. Мы по-прежнему не получаем никакой помощи, если нам нужно добавить новую зависимость, окажется ли это изменение критическим или нет? Ответить на этот вопрос так же трудно, как и раньше.
Заключение
Проблема с использованием Service Locator заключается не в том, что вы получаете зависимость от конкретной реализации Service Locator (хотя это тоже может быть проблемой), а в том, что это полноценный антипаттерн. Он становится причиной не самого приятного опыта разработки для пользователей вашего API и ухудшит вашу жизнь как разработчика, на котором лежит обязанность сопровождать код, потому что вам нужно будет подключать серьезные ментальные ресурсы, чтобы понять последствия каждого внесенного вами изменения.
Компилятор может предложить как пользователям, так и поставщикам немного помощи при внедрении зависимостей через конструктор, но эта помощь недоступна для API, которые полагаются на Service Locator.
Подробнее о паттернах и антипаттернах внедрения зависимостей можно прочитать в моей книге.
Обновление от 20 мая 2014 г.: Еще один способ объяснить отрицательные аспекты Service Locator заключается в том, что он нарушает SOLID.
Обновление от 26 октября 2015 г.: Фундаментальная проблема с Service Locator заключается в том, что он нарушает инкапсуляцию.
Часто бывает, что реализация юнитов объектно-ориентированным подходом создает сложности при изменении/добавлении новых механик в игру. На конкретные классы завязываются компоненты системы, и код становится сильно связным.
Недавно в OTUS в рамках онлайн-курса «Unity Game Developer. Professional» прошел открытый урок «Компоненты игровых объектов». На уроке мы рассмотрели, как при помощи компонентного подхода (не ECS) можно гибко изменять функциональность юнитов таким образом, чтобы система была слабо связной. Если интересно, запись вебинара можно посмотреть по ссылке.
- unity
- разработка игр
- service locator
- антипаттерн
- игровые объекты
- Блог компании OTUS
- Программирование
- Совершенный код