У меня есть такой код:
Код: Выделить всё
public class ServiceA(IServiceB service)
{
public async Task Method() {
return await service.GetValue();
}
}
Код: Выделить всё
[Fact]
public void Test1() {
var mockB = Substitute.For();
_sut = new SeviceA(mockB);
_sut.Method();
Assert.NotNull(mockB);
}
Я нашел способ решить эту проблему — создать свойство или поле для захвата первичного значения. параметр конструктора, а затем используйте его вместо параметра. Примерно так:
Код: Выделить всё
public class ServiceA(IServiceB service)
{
private IServiceB ServiceProperty { get; } = service; //capture the parameter
public async Task Method() {
return await ServiceProperty.GetValue(); //use property instead of parameter
}
}
Другим распространенным применением первичных конструкторов является указание параметров для внедрения зависимостей. Следующий код создает простой контроллер, для использования которого требуется интерфейс службы:
C#
Код: Выделить всё
public interface IService
{
Distance GetDistance();
}
public class ExampleController(IService service) : ControllerBase
{
[HttpGet]
public ActionResult Get()
{
return service.GetDistance();
}
}
-> Я неправильно понимаю первичные конструкторы?
Подробнее здесь: https://stackoverflow.com/questions/775 ... -injection
Мобильная версия