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 容器。
我有以下问题。我有两个 类 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 容器。