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

2023-12-07

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

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

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

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

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

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

EDIT: 这是我的 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对于进程间(后台任务和主 UI 之间,除了音频任务)通信,您将需要某种代理。对于短同步,您可能会考虑使用本地设置,对于更复杂的场景,可能是文件/数据库本地文件夹。如果您决定使用文件,则需要同步进程,为此目的,您有类似的对象Mutex nad 等待句柄.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在一个 .NET 解决方案中跨项目进行通信? 的相关文章

随机推荐