status draft serialization;dependency injection;interface;abstraction;provider pattern;dotnet;csharp;library;pluggable;extensible