为某些基类的所有后代配置Unity注入

Ant*_*kov 6 inheritance dependency-injection unity-container

如何配置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>();
Run Code Online (Sandbox Code Playgroud)

因此,我需要在解析派生类的同时向Unity 注册基类,以便为基类指定的所有注入都将应用于派生类.

DependencyAttribute由于我的项目限制,不允许装饰基类属性.


Unity的codeplex网站上的问题的镜像

Qry*_*taL 6

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>();
Run Code Online (Sandbox Code Playgroud)

注意:您需要支持按惯例注册的 Unity 3 .