如何在一个 .NET 解决方案中跨项目进行通信?
How to communicate across projects inside one .NET solution?
我有一个 .NET Core(UWP 解决方案)应用程序,它有 3 个不同的项目(我们称它们为 A、B 和 C)。
A 和 B 是 Windows 运行时组件,C 是一个简单的 Class 库。
项目 A 和 B 引用了项目 C。
我想访问项目C的class,其实例将在项目A和B之间共享。
我想到了单例模式(当然),使用 .NET 4 的 Lazy 方法
问题是A和B项目每次访问实例时实例都不一样。 Lazy 方法创建了 class 的一个新实例,因为它似乎不是以前创建的。我想知道我是否可以在解决方案的不同项目之间共享一个单例。我读到一个项目与一个进程相关联,每个进程都有自己的内存 space,无法共享。我的问题有解决方案吗?
编辑:
这是我的 HubService class:
的实现
private static readonly Lazy<HubService> Lazy =
new Lazy<HubService>(() => new HubService(), LazyThreadSafetyMode.ExecutionAndPublication);
private HubService()
{
_asyncQueue = new AsyncQueue<Guid>();
}
public static HubService Instance => Lazy.Value;
此外,是否可以使用 Castle Windsor、Ninject、Autofac 或 Unity 等工具在不同程序集之间共享单例?
Singleton class 在这里不起作用 - 每个进程都有自己的内存,因此有自己的 singleton。
UWP 中的
AFAIK 用于进程间(后台任务和主 UI 之间,除了音频任务)通信,您将需要某种代理。对于短同步,您可能会考虑使用 LocalSettings,对于更复杂的情况,可能会考虑使用 LocalFolder 中的 file/database。如果你决定使用一个文件,你将需要同步进程,为此你有像 Mutex nad WaitHandles.
这样的对象
我有一个 .NET Core(UWP 解决方案)应用程序,它有 3 个不同的项目(我们称它们为 A、B 和 C)。
A 和 B 是 Windows 运行时组件,C 是一个简单的 Class 库。
项目 A 和 B 引用了项目 C。
我想访问项目C的class,其实例将在项目A和B之间共享。
我想到了单例模式(当然),使用 .NET 4 的 Lazy 方法
问题是A和B项目每次访问实例时实例都不一样。 Lazy 方法创建了 class 的一个新实例,因为它似乎不是以前创建的。我想知道我是否可以在解决方案的不同项目之间共享一个单例。我读到一个项目与一个进程相关联,每个进程都有自己的内存 space,无法共享。我的问题有解决方案吗?
编辑: 这是我的 HubService class:
的实现 private static readonly Lazy<HubService> Lazy =
new Lazy<HubService>(() => new HubService(), LazyThreadSafetyMode.ExecutionAndPublication);
private HubService()
{
_asyncQueue = new AsyncQueue<Guid>();
}
public static HubService Instance => Lazy.Value;
此外,是否可以使用 Castle Windsor、Ninject、Autofac 或 Unity 等工具在不同程序集之间共享单例?
Singleton class 在这里不起作用 - 每个进程都有自己的内存,因此有自己的 singleton。
UWP 中的
AFAIK 用于进程间(后台任务和主 UI 之间,除了音频任务)通信,您将需要某种代理。对于短同步,您可能会考虑使用 LocalSettings,对于更复杂的情况,可能会考虑使用 LocalFolder 中的 file/database。如果你决定使用一个文件,你将需要同步进程,为此你有像 Mutex nad WaitHandles.
这样的对象