using System.Collections.Generic;
public interface ISomeObject {}
public interface IView<TObject> where TObject : ISomeObject;
public struct SomeResource : ISomeObject {}
public struct ResourceView : IView<SomeResource> {}
public class SomeManager {
public static TView Fetch<TView>() where TView : IView<ISomeObject>, new() => new ();
public static TView Fetch<TView, TSomeObject>()
where TSomeObject : ISomeObject
where TView : IView<TSomeObject>, new() => new ();
public static void Main()
var fetched = SomeManager.Fetch<ResourceView, SomeResource>();