public abstract class Asset {
public string Name { get; private set; }
public string Path { get; private set; }
public JsonAsset Details { get; private set; }
protected Asset(string name, string path, JsonAsset details)
public class JsonAsset: Asset {
public JsonAsset(string name, string path) : base(name, path, null)
public class MonogameAsset: Asset {
public MonogameAsset(string name, string path, JsonAsset details = null) : base(name, path, details)
public static class Assets {
public static class Sprites {
public static readonly MonogameAsset kirby = new MonogameAsset("kirby", "/path/to/kirby.png", new JsonAsset("kirby", "/path/to/kirby.json"));
public class ContentRepository {
public T LoadAsset<T>(Asset asset)
public object LoadAsset(MonogameAsset asset)
public string LoadAsset(JsonAsset asset)
public static void Main()
var content = new ContentRepository();
var asset = content.LoadAsset(Assets.Sprites.kirby);
Console.WriteLine(asset);