Constants result in tensors hidden or nested inside the layer definition, with special cases to capture them during code generation. Instead we could introduce a Constant layer producing a single output tensor. The Constant Layer could be plugged as the producer for all those weights, biases, and others.
This should remove special cases such as MatMul depending on an enum to know if it has one or two inputs, and if the single input is the left or right operand.
During ONNX imports, all initializers should produce a Constant Layer.