是否可以在具有不同范围的单个对象上拥有属性?

时间:2012-10-04 16:49:37

标签: structuremap

我有以下对象:

CommandA (Singleton)
    IFoo Foo (PerRequest)

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

这可能吗?

2 个答案:

答案 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。