-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Расширения для внедрения зависимостей #256
base: feature-239-use-proper-di
Are you sure you want to change the base?
Conversation
SonarCloud Quality Gate failed. |
/// Получить именованную зависимость с помощью IUnityContainer (IUnityContainer должен быть зарегистрирован в IServiceProvider). | ||
/// </summary> | ||
/// <typeparam name="T">Тип.</typeparam> | ||
/// <param name="serviceProvider">IServiceProvider.</param> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Тип.
/// IServiceProvider."
Непонятные комментарии.
using Unity; | ||
|
||
/// <summary> | ||
/// Расширения для внедрения зависимостей. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Формально в новых классах нужно стараться делать комментарии на английском.
|
||
if (unityContainer == null) | ||
{ | ||
throw new InvalidOperationException($"Невозможно получить именнованную зависимость - IUnityContainer не зарегистрирован в этом ServiceProvider."); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше на английском.
} | ||
else | ||
{ | ||
return (unityContainer as IUnityContainer).Resolve<T>(name); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А вот тут некоторая особенность. Дело в том, что насколько я поняла, в описании IServiceProvider в методе GetService если зависимость не зарегана, то должно вернуться null. UnityFactory в таком раскладе вернёт exception.
Но опять же, метод isregistered не совсем удачен для проверки, потому что может быть что-то не зарегано, но имеющихся сведений может хватить, чтобы зарезолвить.
/// <param name="name">Имя зависимости.</param> | ||
/// <returns>Разрешенная зависимость.</returns> | ||
/// <exception cref="InvalidOperationException">Ошибка получения именованной зависимости.</exception> | ||
public static object GetService<T>(this IServiceProvider serviceProvider, string name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обязательно нужны тесты:
- Ничего не зарегано.
- Зарегано всё.
- Зареганы только параметры конструктора, а сам тип нет.
- Именованные\неименованные резолвы.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тесты реализованы здесь
775f599
to
384e52d
Compare
SonarCloud Quality Gate failed. 0 Bugs 0.0% Coverage Catch issues before they fail your Quality Gate with our IDE extension SonarLint |
Добавлена возможность резолвить именованные зависимости через
IServiceProvider
, используя внутри зарегистрированныйIUnityContainer
.