0

在结构映射中,您可以控制您注册的对象的生命周期,通常是具体类型的一些接口,如下所示:

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

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

这显然是结构映射的一个方便特性,因为我肯定不想注册每个具体类型。

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

此外,如果您可以将对象的生命周期指定为覆盖,那就太好了,就像:

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

在这种情况下,生命周期将被修改为下一个解决方案GetInstance

知道如何做到这一点吗?

4

1 回答 1

0

您可以创建一个子容器并注册组件:

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

我认为您不想注册的原因是因为您不希望注册挂起。我认为这解决了这个问题。

我也不知道指定默认生命周期的内置方法。但是,我认为使用该IAutoMocker界面可能是可能的。您可能可以浏览整个文件夹中的代码以了解如何操作。AutoMocking 挂钩到容器中,以便请求未注册的组件,它会调用IAutoMocker并给它一个注册组件的机会。我想你可以IAutoMocker用来注册具有不同默认生命周期的组件。

如果你成功了,我希望你发送一个拉取请求或写一篇博文与我们分享。

于 2012-09-03T13:47:21.757 回答