При использовании регистрации единиц и параметров / конструкторов внедрения вы определяете их для типа, которому они соответствуют.Я не использую файлы конфигурации в единстве, но в коде это позволяет вам делать следующее:
unityContainer.RegisterType<IFoo, FooOne>("FooOne" new InjectionProperty("Qux", "somevalue"));
unityContainer.RegisterType<IFoo, FooTwo>("FooTwo", new InjectionProperty("Qux", "anothervalue"));
То есть разные конкретные типы могут иметь разные параметры / свойства впрыска.В единстве, если только регистрации не названы, используются последние зарегистрированные параметры бетонного впрыска.
Учитывайте следующее:
unityContainer.RegisterType<IFoo, FooOne>(new InjectionProperty("Qux", "somevalue"));
unityContainer.RegisterType<FooOne>(new InjectionProperty("Qux", "anothervalue"));
Если я тогда сделал либо unityContainer.Resolve<IFoo>()
, либо unityContainer.Resolve<FooOne>()
обабудет иметь «другое значение», вставленное в «Qux», поскольку оно разрешает как экземпляр FooOne
, так и последнюю регистрацию, вводящую «Qux» как «другое значение».