У меня есть простой класс, который выглядит так:
public class TestClass1
{
private string testString = "Should be set by DI";
public TestClass1(string testString)
{
this.testString = testString;
}
public string GetData()
{
return testString + DateTime.Now;
}
}
Я хочу внедрить его с помощью встроенного DI в простое основное веб-приложение ASP.NET, но с параметром testString, установленным при инициализации внедрения зависимостей.
Я попытался установить следующее в startup.cs, но во время выполнения это не работает, потому что TestClass1 не имеет конструктора без параметров:
services.AddScoped(provider => new TestClass1("Success!"));
new TestClass()? ДИ так не работает - person Tseng   schedule 13.07.2016newпри получении экземпляра. Вы всегда вводите его через конструктор. DI — это не какая-то магия компилятора, это просто CLR/OOP с небольшим количеством отражений или ExpressionTrees. Я подозреваю, что он делаетnew TestClass()в своем коде (обратите внимание на новое ключевое слово и отсутствие параметра). ДИ работает не так. Скорее вы передаете его через конструктор, напримерpublic MyService(TestClass injectedTestCass)- person Tseng   schedule 13.07.2016new, потому что DI должен обрабатывать создание экземпляра класса. Но я понятия не имею, как написать строкуservices.AddScopedс параметрами, если я не использую ключевое слово new - person Rasmus Hansen   schedule 13.07.2016new MyClass()в любом месте своего кода, чтобы разрешить зависимость без передачи параметров, и это первое, что пришло мне в голову. когда он получил ошибку, нет конструктора без параметров. Я просто пропустил случай, когда модели создаются инфраструктурой MVC при вызове действий контроллера, что было в случае, когда OP пытался использовать его в - person Tseng   schedule 14.07.2016