首页 > 解决方案 > 是否可以在返回接口的私有构造函数生成的类中订阅公共 EventHandler?

问题描述

我有一个带有公共EventHandler委托定义但有一个私有构造函数的公共类。该类是使用静态方法创建的,我不知道是否或如何在不公开公共构造函数的情况下订阅它。

下面的示例显示ISomeService从静态方法返回UsingHttpClient。所以类被实例化了,但是由于返回的是接口而不是类实例,所以没有'句柄'可以用来调用someInstance.SomeEvent += OnSomeEvent

public class SomeService
{
    public EventHandler<bool> SomeEvent;
    private readonly HttpClient _httpClient;

    private SomeService(HttpClient httpclient) => _httpClient = httpClient;

    public static ISomeService UsingHttpClient(HttpClient httpClient) => new SomeService(httpClient);

    //...some other code invoking SomeEvent
}

我尝试创建一个返回 EventHandler 的方法,但这显然是错误的,并导致错误:public EventHandler<bool> GetBusyEvent => BusyEvent;.

我也尝试EventHandler在接口中列出委托,ISomeService但这会在 VS2019 中出现错误:“接口不能包含实例字段”。

这甚至可能吗?我不想使用公共构造函数重新设计类,但我不知道任何其他方式。

标签: c#

解决方案


如果你有一个ISomeService你知道是 a的引用SomeService,那么你可以转换它。

例如

ISomeService svc = SomeService.UsingHttpClient(client);
if (svc is SomeService ss)
{
    ss.SomeEvent += (s,a) =>
    {
        //whatever
    };
}

推荐阅读