c# - 如何在一个 .NET 解决方案中跨项目进行通信?

标签 c# .net design-patterns dependency-injection inversion-of-control

我有一个 .NET Core(UWP 解决方案)应用程序,它有 3 个不同的项目(我们称它们为 A、B 和 C)。

A 和 B 是 Windows 运行时组件,C 是一个简单的类库。

项目 A 和 B 都引用了项目 C。

我想访问项目C的一个类,它的实例将在项目A和B之间共享。

我想到了单例模式(当然),使用 .NET 4 的 Lazy 方法

问题是A和B项目每次访问实例时实例都不一样。 Lazy 方法创建类的一个新实例,因为它似乎不是以前创建的。我想知道我是否可以在解决方案的不同项目之间共享一个单例。我读过一个项目与一个进程相关联,每个进程都有自己的内存空间,无法共享。我的问题有解决方案吗?

编辑: 这是我的 HubService 类的实现:

    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 等工具在不同程序集中共享单例?

最佳答案

单例类在这里不起作用 - 每个进程都有自己的内存,因此有自己的单例。

UWP 中的 AFAIK 对于进程间(后台任务和主 UI 之间,音频任务除外)通信,您需要某种代理。对于短同步,您可能会考虑使用 LocalSettings,对于更复杂的场景,可能会考虑使用 LocalFolder 中的文件/数据库。如果您决定使用一个文件,您将需要同步进程,为此您有像 MutexWaitHandles 这样的对象。

关于c# - 如何在一个 .NET 解决方案中跨项目进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943376/

相关文章:

C# 对 List 的并行读取访问而无需复制

java - 如何在初始化复杂java对象时初始化它的所有子非原始字段?

c# - 访问 Office 2003 文件

c# - 从 NameValueCollection 设置类的属性

c# - 通过套接字发送自定义 WCF 请求

.net - XAML 中的单个字符填充

c# - 添加数据库迁移时指定应用程序设置

c# - 程序集未找到 NEWBIE 问题

model-view-controller - 遵循 MVC 时递归函数放在哪里?

java - 如何在 Java 中打包工厂