我有以下对象:
CommandA (Singleton)
IFoo Foo (PerRequest)
我想将一个代理对象注入到单例中,这样当我调用Foo时,它会给我一个特定于我的请求的foo对象。
这可能吗?
答案 0 :(得分:2)
按照设计,单个中的所有进样都应该单独进行。
首先,如果CommandA
是单例,则注入的对象将是单例
现在,如果您说每个请求需要一个新对象,您可能在CommandA中有一个Factory(Singleton),它会在每次调用时创建一个新对象或获取代理引用。
希望有所帮助!
答案 1 :(得分:1)
正如安舒所说,听起来你真的是在工厂之后。实现它的一种方法是:
命令:
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>();
由于配置了IFoo,
StructureMap将自动注入Func。