Unity容器 - 在所有线程中获取单例

时间:2015-04-21 07:14:37

标签: c# .net unity-container

使用Unity容器在给定应用程序的每个线程中获取类的单例实例的最佳模式是什么?

非常感谢您的回答。

3 个答案:

答案 0 :(得分:3)

只需使用ContainerControlledLifetimeManager然后 - 它会每次都返回相同的实例(只要您使用相同的容器)

如何使用

var container = new UnityContainer();
container.RegisterType(typeof(IMyInterface), 
                       typeof(MyImplementation), 
                       "singletonReg", 
                        new ContainerControlledLifetimeManager());

答案 1 :(得分:1)

只需使用ContainerControlledLifetimeManager注册您的类型。

容器是线程安全的(派生SynchronizedLifetimeManager),您可以看到源代码here

答案 2 :(得分:1)

如果您指的是所有线程使用的单例实例'然后在注册期间指定适当的终身经理:

unityContainer.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager()); 

unityContainer.RegisterInstance<IMyService>(new MyService(), new ContainerControlledLifetineManager());

如果你的意思是每个线程有一个独特的单例实例&#39;然后可能使用在Unity注册中签名的字符串来提供线程ID(这需要每线程注册,我怀疑它不是你的意思):

unityContainer.RegisterType<IMyService, MyService>(Thread.CurrentThread.ManagedThreadId, new ContainerControlledLifetimeManager());