@jmdavis Yes, but when you use plugin, you haven't .di interface? Or I'm wrong? And you can write many different plugins for one .di header? But what about ODR? If you declare class Foo in you header 'foo.di', you can have only one foo.Foo class definition in your program.
You can't declare first foo.Foo in plugin_1.so, second foo.Foo in plugin_2.so and load both plugins at a same time. Is not it? May be I do not fully understand the mechanism of shared libraries.