SmartDataProvider was not ported to the .NET interface because it is just an alternative to DataProvider that allows for performance improvements that are only possible for the in-process java Adapters.

The notes below apply to the java version of the messenger adapter.
After the described changes, the code should be ready for a natural porting to LS .NET library interface.

The Data Adapter can implement the DataProvider interface as well.
This affects the subscribe method, which will lack the "Object handle" argument (hence, the method will replace the dummy overload at the bottom).
You should use the "item" argument anywhere the "handle" argument is used;
in particular, you cannot store a "Object listHandle", but you could store a "String listName" in place of it, for instance.
As a last consequence, the smartUpdate / smartEndOfSnapshot calls should be replaced with update / endOfSnapshot, which are based on the item name.