概括:
是否可以遍历某个解决方案文件夹中的每个项目并从每个项目具有的类或接口中获取属性?如果是这样,我可以要求每个项目都包含这个特定的类吗?
解释:
我有一个 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);
}
}
}
是否可以让这些 Endpoint 项目确认某个接口,例如始终包含一个DataModel
实现某个接口的类,并在 Main 项目的 Register Method 中循环这个类?还是我在这里出错了,我应该用另一种方式解决这个问题吗?