Нельзя использовать внедрение зависимостей для атрибутов, поскольку атрибуты не контролируются и не создаются средой внедрения зависимостей, а контролируются самим CLR. Попробуйте создать дизайн, если ваш атрибут не требует внедрения зависимостей.
Если все не удается, вы можете использовать шаблон локатора службы внутри LevelValidator
(лучше всего оставить атрибут allone) и выполнить вызов контейнера Unity из класса LevelValidator
. Чтобы это работало, вам нужно иметь статическое поле, содержащее контейнер. Например:
public class LevelValidator : Validator
{
public static UnityContainer Container { get; set; }
public LevelValidator()
{
this.Levels = Container.Resolve<Levels>();
}
public Levels Levels { get; set; }
}
В пути запуска вашего приложения вам нужно установить это статическое свойство Container
следующим образом:
public void Main()
{
var container = new UnityContainer();
// configure it
LevelValidator.Container = container;
}
Это решение далеко от идеального и должно быть предотвращено в большинстве случаев. Однако создание атрибута и LevelValidator
находится вне контроля Unity.