0

我有以下对象:

CommandA (Singleton)
    IFoo Foo (PerRequest)

我想将一个代理对象注入到单例中,这样当我调用 Foo 时,它会给我特定于我的请求的 foo 对象。

这可能吗?

4

2 回答 2

2

按照设计,单例中的所有注入都应该是单例的。首先,如果您CommandA是单例,则注入的对象将是单例的。
现在,如果您说每个请求都需要一个新对象,那么您的 CommandA 中可能会有一个工厂(单例),它会在每次调用时创建一个新对象或获取代理引用。

希望有帮助!

于 2012-10-04T17:08:34.820 回答
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>();

StructureMap 将自动注入 Func,因为 IFoo 已配置。

于 2012-10-06T09:20:30.340 回答