Once we have top-level app infrastructure finished, we'll be able to start churning out plugins and new adding functionality.
Problem
The Strix Music SDK has models that operate in layers. The Plugin layer and ViewModel layer both implement IStrixDataRoot and can sit on top of anything that implements IStrixDataRoot.
Consumers of the SDK should be able to peel back these layers to access the underlying data. The plugin layer does this by implementing IDelegatable<T>, providing an Inner property that points to the original implementation.
The ViewModel layer, however, does not implement IDelegatable<T>, meaning the consumer cannot read from the backing object.
Tl;dr; If you feed the Plugin layer to a ViewModel layer, ViewModels don't allow you to access data on the plugins. In the Strix Music App, this makes plugins inaccessible from the UI.
Background
Once we have top-level app infrastructure finished, we'll be able to start churning out plugins and new adding functionality.
Problem
The Strix Music SDK has models that operate in layers. The Plugin layer and ViewModel layer both implement
IStrixDataRoot
and can sit on top of anything that implementsIStrixDataRoot
.Consumers of the SDK should be able to peel back these layers to access the underlying data. The plugin layer does this by implementing
IDelegatable<T>
, providing anInner
property that points to the original implementation.The ViewModel layer, however, does not implement
IDelegatable<T>
, meaning the consumer cannot read from the backing object.Tl;dr; If you feed the Plugin layer to a ViewModel layer, ViewModels don't allow you to access data on the plugins. In the Strix Music App, this makes plugins inaccessible from the UI.
Solution
OwlCore.ComponentModel.IDelegatable<T>
in all ViewModels in the SDK, assigning it the original model.Inner
property.