Неуниверсальный метод IServiceProvider.GetService (Type) нельзя использовать с аргументами типа

  1. Оба module.exports и exports указывают на то же function database_module(cfg) {...}.
    1| var a, b;
    2| a = b = function() { console.log("Old"); };
    3|     b = function() { console.log("New"); };
    4|
    5| a(); // "Old"
    6| b(); // "New"
    
    Вы можете изменить b в строке 3 на a, выход - наоборот. Вывод: a и b независимы.
  2. Таким образом, module.exports = exports = nano = function database_module(cfg) {...} эквивалентно:
    var f = function database_module(cfg) {...};
    module.exports = f;
    exports = f;
    
    Предполагалось, что это module.js, что требуется foo.js. Преимущества module.exports = exports = nano = function database_module(cfg) {...} теперь ясны: В foo.js, поскольку module.exports - require('./module.js'):
    var output = require('./modules.js')();
    
    В moduls.js: вы можете использовать exports вместо module.exports.

Итак, вы будете счастливы, если оба exports и module.exports указывают на одно и то же.

2
задан 57913 16 January 2019 в 13:08
поделиться

2 ответа

Это означает, что ваш компилятор знает только метод, который принимает тип.

Вы можете вызвать

var incoming = serviceProvider.GetService(typeof(IService));

или добавить

using Microsoft.Extensions.DependencyInjection;

, чтобы убедиться, что ваш компилятор знает метод расширения, который позволяет вам указать ваш тип в качестве универсального параметра. Для этого может потребоваться установка пакета Microsoft.Extensions.DependencyInjection.Abstractions.

0
ответ дан nvoigt 16 January 2019 в 13:08
поделиться

Универсальный GetService < T> метод является методом расширения. Это означает, что вам нужно иметь:

using Microsoft.Extensions.DependencyInjection;

, чтобы компилятор мог его найти.

Этот метод предназначен только для дополнительных услуг. Он вернет null, если объект не может быть построен, либо потому, что тип не был зарегистрирован, либо потому, что некоторые его зависимости отсутствуют.

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

Когда выдается это исключение, полный текст исключения будет огромной помощью в поиске актуальной проблемы. Исключения, сгенерированные в конструкторах, могут появляться в свойстве Exception.InnerException . Последовательность вызовов, в результате которых возникло исключение, появится в свойстве StackTrace . Вызов Exception.ToString () вернет строку, содержащую всю этой информации для текущего исключения и любых внутренних исключений.

0
ответ дан Panagiotis Kanavos 16 January 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: