NHibernate, внедрение службы в IUserType с использованием контейнера .NET Core ioc - PullRequest
0 голосов
/ 05 декабря 2018

Можно ли внедрить сервис в UserType?

internal class MyUserType : IUserType
{
    private static ISerializer _serializer;


    public MyUserType (ISerializer serializer)
    {
        _serializer = serializer
    }
} 

Попробовал, почему он работает для всех, но не работает, заявив, что ему нужен конструктор по умолчанию без параметров

1 Ответ

0 голосов
/ 05 декабря 2018

Я не думаю, что это будет возможно, так как вам нужно было бы подключиться к конвейеру / процессу создания компонента NH, который, AFAIK, не всегда доступен.

Вы можете использовать внедрение свойств с«локальный по умолчанию».Это позволит вам зависеть от абстракции ISerializer и заменять ее при необходимости, возможно, тестируя, но полагаться на конкретный тип по умолчанию в среде, которая не поддерживает IoC.

internal class MyUserType : IUserType
{
    private static ISerializer _serializer = new ConcreteSerializer();

    public JsonShippingDetailsUserType()
    {
    }

    public ISerializer Serializer { get; set; }
} 

Примечание: этодействительно наивная реализация внедрения свойств.Если вы воспользуетесь этим решением, вам нужно «укрепить» код.В книге Д.И. Симанна DI есть отличный пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...