Разрешить привязку типа ToConstant к Ninject - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть класс с 3 параметрами в конструкторе, зарегистрированном в Ninject с помощью «ToConstant».Я хочу получить этот экземпляр без предоставления параметров конструктора, потому что был связан как один экземпляр.Если это возможно?

Я понимаю, что если я регистрирую тип в качестве единственного экземпляра, Ninject не должен запрашивать какие-либо параметры конструктора, потому что создавать нечего.

Ниже приведен фрагмент кода:

//create object
var singleInstance = new WhateverObject(param1, param2, param3);
//bind object ToConstant 
_kernel.Bind<WhateverObject>().ToConstant(singleInstance);
//resolve type
var instanceToRetrieve = _kernel.Get<WhateverObject>();   

Вышеприведенный оператор (тип разрешения) завершается сбоем, потому что WhitherObject не имеет конструктора без параметров, и для объекта требуется param1, param2 и param3.Дело в том, зачем Ninject эти параметры, если объект был зарегистрирован как один экземпляр?Как мы просим указать тип, зарегистрированный как синглтон?

Спасибо за ваш вклад!

1 Ответ

0 голосов
/ 27 сентября 2019

Найден способ связать тип как константу (синглтон):

public void BindToConstant<T1, T2>(Dictionary<string, object> arguments = null) where T2 : T1
        {
            if (!_kernel.GetBindings(typeof(T1)).Any())
            {
                var constant = _kernel.Bind<T1>().To<T2>().InSingletonScope();
                if (arguments != null && arguments.Count > 0)
                {
                    arguments.ForEach(p =>
                    {
                        constant.WithConstructorArgument(p.Key, p.Value);
                    });
                }
            }
        }

Где аргументы - это словарь, в котором ключ - это имя аргумента конструктора, а значение - это значение аргумента, так что выМожно вызвать этот метод с гибким количеством параметров.

Надеюсь, что это поможет кому-то с такой же проблемой!

...