Unity 中的装饰器有很多参数

Decorators in Unity with many arguments

我有以下问题。我有两个 类 T1 和 T2,它们都实现了接口 T。我希望 T2 装饰 T1,所以当我创建 T 的实例时,首先调用 T2,然后调用 T1。

public class T1 : IT
{
    public void Call()
    {
        Write("T1");
    }
}

public class T2 : IT
{
    private IT _t;

    public T2(ISomeOther other, IT t)
    {
        _t = t;
    }

    public void Call()
    {
        Write("T2");
        _t.Call();
    }
}

public interface T {
    void Call();
}

我的unity是这样的:

var unityContainer = new UnityContainer();
unityContainer.RegisterType<ISomeOther>(new Other());
unityContainer.RegisterType<T>(new T1());
unityContainer.RegisterType<T, T2>(new InjectionConstructor(new ResolvedParameter<ISomeOther>(), new ResolvedParameter<T2>());

我想避免必须明确说明 ResolvedParameters - Unity 的全部目的是删除此类工作。我想简单地告诉 Unity T2 装饰 T1,并让 Unity 解决这些争论。我希望我的最后一行代码看起来像这样:

unityContainer.RegisterType<T, T2>().Decorates<T1>();

在Unity中可以实现这样的功能吗?还有其他 IoC 容器更适合这种事情吗?

请注意,这是一个简化的示例,因此任何轻微的语法错误都是偶然的。

编辑:

这不是 How do I use the Decorator Pattern with Unity without explicitly specifying every parameter in the InjectionConstructor 的副本 - 我不想明确创建装饰器或列出依赖项。像这样:

_container.Register<IT, T1>();
_container.Decorate<IT, T2>();
_container.Decorate<IT, T3>();

T1、T2 和 T3 在构造函数中可能有各种依赖关系 - 我不想列出这些,我希望 IoC 容器为我解决这些问题(否则为什么要使用 IoC 容器?)

在 Ninject 中有这样一个非常有用的功能:

Bind<T>().To<T1>().WhenInjectedInto(typeof(T2));

它将在构造函数中使用 T1 的实例初始化 T2。希望我理解你的权利。 但是,如果 Unity 中有这样的东西,我真的很感兴趣,因为它也是我的主要 IoC 容器。