结构图未注册类型的生命周期

时间:2012-08-31 06:27:16

标签: ioc-container structuremap

在structuremap中,您可以控制您注册的对象的lifeCycle,通常是具体类型的某个接口,如下所示:

x.For<IMyInterface>().Transient().Use<MyObject>();

所以我可以控制生命周期。但是,当解析未注册的对象(Concrete)类型时,生命周期默认为似乎是Transient()。

这显然是结构图的一个方便功能,因为我当然不想注册每个具体类型。

但是有没有办法在没有注册的情况下覆盖这个生命周期?

此外,如果您可以将对象的生命周期指定为覆盖,那将非常棒:

ObjectFactory.With<SomeUnregisteredConcreteObject>().LifeCycleIs(...)

在这种情况下,生命周期将被修改为下一个分辨率为GetInstance

知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以创建一个子容器&amp;注册组件:

var child = ObjectFactory.Container.CreateChildContainer();
child.Configure(config => config.For<SomeUnregisteredConcreteType>().Singleton());
var @object = child.GetInstance<...>();

我认为您不想注册的原因是因为您不希望注册处于闲置状态。我认为这解决了这个问题。

我也不知道内置的指定默认生命周期的方法。但是,我认为可能使用IAutoMocker接口。您可以浏览that whole folder中的代码以了解如何执行此操作。 AutoMocking挂钩到容器中,以便请求未注册的组件,它调用IAutoMocker并为其提供注册组件的机会。我想你可以使用IAutoMocker来注册具有不同默认生命周期的组件。

如果你成功了,我希望你发送拉动请求或撰写博客文章与我们其他人分享。