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

时间:2016-03-11 14:58:59

标签: 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等工具在不同的程序集之间共享单例?

1 个答案:

答案 0 :(得分:1)

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

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