概要:
特定のソリューション フォルダー内の各プロジェクトをループして、各プロジェクトが持つクラスまたはインターフェイスからプロパティを取得することは可能ですか? もしそうなら、各プロジェクトにこの特定のクラスを含めるように要求できますか?
説明:
ASP.NET Web API プロジェクトがあります。
このプロジェクトの一部は、たとえば次のような API フレームワークです。
- 認証
- ロギング
- ヘルプページの生成
この部分はおそらく時間の経過とともに大きく変化することはなく、変化する場合はおそらく破壊的な変更または Api インターフェースにまったく影響を与えない変更です。
他の部分は、たとえば次のような API エンドポイントです。
- ユーザー
- 関係
- 反応
- いいね
この部分は比較的頻繁に変更されるので、バージョン管理を実装したいと考えています。私の考えは、たとえば、新しいプロジェクトで新しいバージョンを作成することです。
- Api.Endpoints.V1
- Api.Endpoints.V2
- Api.Endpoints.V3
このプロジェクトにはすべて、新しいバージョンを追加するためにメインの Api プロジェクトで呼び出すことができるインターフェイスが必要です。
たとえば、すべてのApi.Endpoints.V*
プロジェクトで (Odata)IEdmModel
プロパティを公開し、これをループしてメイン プロジェクトに登録したいと考えています。コードでは、これは次のようになります。
Api.Endpoints.V1:
namespace Api.Endpoints.V1
{
public class DataModel
{
public Model IEdmModel { get; private set; }
public DataModel()
{
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Users>("Users");
modelBuilder.EntitySet<Relations>("Relations");
modelBuilder.EntitySet<Reactions>("Reactions");
modelBuilder.EntitySet<Likes>("Likes");
this.IEdmModel = modelBuilder.GetEdmModel();
}
}
}
メイン API プロジェクト (疑似コード):
namespace Api
{
public static void Register(HttpConfiguration configuration)
{
foreach(project in VersionsFolder)
{
configuration.Routes.MapODataRoute(routeName: project.Version, routePrefix: project.Version, model: project.Model);
}
}
}
これらのエンドポイント プロジェクトを特定のインターフェイスに確認させることは可能ですか?たとえばDataModel
、特定のインターフェイスを実装するクラスを常に含み、メイン プロジェクトの Register メソッドでこれをループしますか? または、ここで間違っているので、別の方法で解決する必要がありますか?