public class MyDataListenerManager
{
private Dictionary<Type, IMyDataListener<IMyDataInterface>> listeners = new()
{
{typeof(MyData), new MyDataListener()},//Error: Argument type 'MyDataListener' is not assignable to parameter type 'IMyDataListener<IMyDataInterface>'
{typeof(MyData2), new MyData2Listener()} // Error: Argument type 'MyDataListener2' is not assignable to parameter type 'IMyDataListener<IMyDataInterface>'
};
//call from somewhere else
public void OnDataChange(IMyDataInterface data)
{
if (listeners.TryGetValue(data.GetType(), out var listener))
{
listener.OnDataChange(data);
}
}
}
public class MyDataListenerManager
{
private Dictionary<Type, IMyDataListener<IMyDataInterface>> listeners = new()
{
{typeof(MyData), new MyDataListener()},//Error: Argument type 'MyDataListener' is not assignable to parameter type 'IMyDataListener<IMyDataInterface>'
{typeof(MyData2), new MyData2Listener()} // Error: Argument type 'MyDataListener2' is not assignable to parameter type 'IMyDataListener<IMyDataInterface>'
};
//call from somewhere else
public void OnDataChange(IMyDataInterface data)
{
if (listeners.TryGetValue(data.GetType(), out var listener))
{
listener.OnDataChange(data);
}
}
}