我经常遇到这样的问题:我有不同的插件,它们基本上都执行相同的任务,但都以不同的方式。所以每个插件都需要不同类型的参数,但是如何传递它们呢?
IMySpecificTask plugin = PluginResolver.Resolve(typeof(IMySpecificTask));
IMySpecificTask
的每个实现都需要我需要访问的域的不同对象。
我当然可以使用服务定位器/单例模式来获取我需要的信息但是不是更清洁的方式吗?
我能想到的另一种方式,但对我来说似乎也很可疑:
if (plugin is INeedsServiceA a)
a.SetServiceA(myserviceA);
if (plugin is INeedsServiceB b)
b.SetServiceB(myserviceB);
...