我有以下对象:
CommandA (Singleton)
IFoo Foo (PerRequest)
我想将一个代理对象注入到单例中,这样当我调用 Foo 时,它会给我特定于我的请求的 foo 对象。
这可能吗?
我有以下对象:
CommandA (Singleton)
IFoo Foo (PerRequest)
我想将一个代理对象注入到单例中,这样当我调用 Foo 时,它会给我特定于我的请求的 foo 对象。
这可能吗?
按照设计,单例中的所有注入都应该是单例的。首先,如果您CommandA
是单例,则注入的对象将是单例的。
现在,如果您说每个请求都需要一个新对象,那么您的 CommandA 中可能会有一个工厂(单例),它会在每次调用时创建一个新对象或获取代理引用。
希望有帮助!
正如安舒所说,听起来你真的是在追求工厂行为。实现它的一种方法是这样的:
命令:
public class Command : ICommand
{
private Func<IFoo> _fooProvider;
public Command(Func<IFoo> fooProvider){ _fooProvider = fooProvider; }
public IFoo Foo { get{ return _fooProvider(); }}
}
在您的配置中:
For<ICommand>().Singleton().Use<Command>();
For<IFoo>().Use<Foo>();
StructureMap 将自动注入 Func,因为 IFoo 已配置。