Надеюсь, кто-то может пролить свет на этот. У меня есть интерфейс с необязательным параметром. Мы используем Unity. Если я попытаюсь изменить необязательный параметр в реализации метода, он работает напрямую, но объект Unity использует интерфейс по умолчанию, а не по умолчанию реализованный метод.Интерфейс C#, единство и необязательный параметр
Установка:
public interface ITestOptional {
string HappyMethod(string input, bool amHappy = false);
}
public class TestingOptional : ITestOptional {
public string HappyMethod(string input, bool amHappy = true) {
if (amHappy) return input + " is Happy!";
return input + " is Not Happy!";
}
}
Добавить в Unity:
container.RegisterType<ITestOptional, TestingOptional>();
И тест:
//direct call
var testDirect = new TestingOptional();
string happyDirect = testDirect.HappyMethod("Cow", true); //expecting happy - get happy
string sadDirect = testDirect.HappyMethod("Cow", false); //expecting not happy - get not happy
string defaultDirect = testDirect.HappyMethod("Cow"); //expecting happy (default) get happy
//unity
var testUnity = ServiceLocator.Current.GetInstance<ITestOptional>();
string happyUnity = testUnity.HappyMethod("Cow", true); //expecting happy - get happy
string sadUnity = testUnity.HappyMethod("Cow", false); //expecting not happy - get not happy
string defaultUnity = testUnity.HappyMethod("Cow"); //expecting happy (default) but get NOT happy.
Любые идеи, почему объект Unity использует ложь в качестве необязательного параметра, когда используемые для внедрения правда?
Я не хочу звучать критически, но кажется, что на самом деле путано иметь эту разницу. – n8wrl
Я полностью согласен с фактором замешательства.Я планировал сделать матч по умолчанию, прежде чем любопытство улучшило меня, почему он это делал! – imukai