Сконфигурируйте Unity Injection для всех потомков некоторого базового класса - PullRequest
6 голосов
/ 23 июня 2010

Как настроить Unity так, чтобы любой класс, производный от некоторого базового класса, проходил через конвейер внедрения, определенный для базового класса.

public abstract class Base
{
    public IDependency Dependency {get;set;}
};

public class Derived1: Base
{
};

public class Derived2: Base
{
};


container.RegisterType<Base>(new InjectionProperty("Dependency", new ResolvedParameter<IDependency>()));
var d1 = container.Resolve<Derived1>();

Таким образом, мне нужно зарегистрировать базовый класс сUnity, в то время как разрешает производные классы , так что все инъекции, указанные для базового класса, будут применяться к производным классам.

Из-за ограничений моего проекта не допускается украшать свойство базового класса DependencyAttribute.1011 *


Зеркало вопроса на сайте кодекса Unity

1 Ответ

6 голосов
/ 03 сентября 2013
var container = new UnityContainer();
container
    .RegisterType<IDependency, Dependency1>()
    .RegisterTypes(
        AllClasses
            .FromAssemblies(Assembly.GetExecutingAssembly())
            .Where(t => typeof(Base).IsAssignableFrom(t)),
        getInjectionMembers: _ => new[] { new InjectionProperty("Dependency") });
var d1 = container.Resolve<Derived1>();

Примечание: вам нужен Unity 3, который поддерживает Регистрация по соглашению .

...