我们应该每次都创建一个新的终身经理实例吗?

时间:2014-02-01 08:35:04

标签: c# unity-container

每次注册类型时是否应创建LifetimeManager的新实例?

container.RegisterType<IFoo1, Foo1>(new HierarchicalLifetimeManager());
container.RegisterType<IFoo2, Foo2>(new HierarchicalLifetimeManager());
container.RegisterType<IFoo3, Foo3>(new HierarchicalLifetimeManager());
...
container.RegisterType<IFoo99, Foo99>(new HierarchicalLifetimeManager());

还是应该重复使用LifeTime的所有注册?

var defaultLifetimeManager = new HierarchicalLifetimeManager();

container.RegisterType<IFoo1, Foo1>(defaultLifetimeManager);
container.RegisterType<IFoo2, Foo2>(defaultLifetimeManager);
container.RegisterType<IFoo3, Foo3>(defaultLifetimeManager);
...
container.RegisterType<IFoo99, Foo99>(defaultLifetimeManager);

1 个答案:

答案 0 :(得分:3)

Tomas Mikolov可能回答了您的问题。它说如果您尝试重用生命周期管理器,则会出现一个异常:

  

生命周期管理器已注册。终身经理不能   要重用,请创建一个新的。

     

说明:执行以下操作时发生未处理的异常   当前的Web请求。请查看堆栈跟踪以获取更多信息   有关错误及其在代码中起源的信息。

     

异常详细信息:System.InvalidOperationException:生存期   经理已经注册。终身经理不能重复使用,   请创建一个新的。