Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity容器-在所有线程中获取单例_C#_.net_Unity Container - Fatal编程技术网

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

C# Unity容器-在所有线程中获取单例,c#,.net,unity-container,C#,.net,Unity Container,使用Unity容器在给定应用程序的每个线程中获取类的单例实例的最佳模式是什么 非常感谢您的回答。只需使用一个then-它每次都会返回相同的实例(只要您使用相同的容器) 如何使用 只需使用ContainerControlled LifetimeManager注册您的类型即可 容器是线程安全的(派生SynchronizedLifetimeManager),您可以看到源代码。如果您指的是“所有线程使用的单实例”,则只需在注册期间指定适当的生存期管理器: unityContainer.RegisterT

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

非常感谢您的回答。

只需使用一个then-它每次都会返回相同的实例(只要您使用相同的容器)

如何使用
只需使用
ContainerControlled LifetimeManager
注册您的类型即可


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

如果您指的是“所有线程使用的单实例”,则只需在注册期间指定适当的生存期管理器:

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

unityContainer.RegisterInstance<IMyService>(new MyService(), new ContainerControlledLifetineManager());
unityContainer.RegisterType(新的ContainerControlledLifetimeManager());
unityContainer.RegisterInstance(新的MyService(),新的ContainerControlledLifetineManager());
如果您的意思是“每个线程都有一个唯一的单例实例”,那么可以在Unity注册中使用获取签名的字符串来提供线程id(这需要每个线程注册,我怀疑这不是您的意思):

unityContainer.RegisterType(Thread.CurrentThread.ManagedThreadId,新的ContainerControlled LifetimeManager());

你的问题不清楚。在每个线程中获取类的单实例是什么意思?你是说每个线程都需要自己的实例?每个线程都需要相同的应用程序全局实例,所以如果我在线程A中更改实例,线程B可以看到更改,我应该如何将容器传递给每个线程?有什么模式吗?你可以将它作为一个闭包传递给你的线程方法,作为一个静态成员传递给如果没有考虑到这一点,您希望如何从容器中解析实例?
unityContainer.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager()); 

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