循环访问解决方案文件夹中的项目并获取属性

时间:2013-03-16 16:37:14

标签: c# asp.net-web-api

要点:

是否可以遍历某个解决方案文件夹中的每个项目,并从每个项目的类或接口获取属性?如果是这样,我可以要求每个项目包含这个特定的类吗?

解释

我有一个ASP.NET Web API项目。

该项目的一部分是API Framework,例如:

  • 验证
  • 登录
  • 帮助页面生成

这部分概率不会随着时间的推移发生太大变化,如果它发生变化,它就会突然破坏不会影响Api界面的变化或变化。

另一部分是API端点,例如:

  • 用户
  • 关系
  • 反应
  • 喜欢

这部分会相对频繁地改变,所以我想实现版本控制。 我的想法是在一个新项目中制作每个新版本,例如:

  • Api.Endpoints.V1
  • Api.Endpoints.V2
  • Api.Endpoints.V3

我希望这个项目都有一个接口,我可以在主Api项目中调用它来添加新版本。

例如,我希望所有Api.Endpoints.V*项目都公开一个(Odata)IEdmModel属性,我可以循环并在我的Main项目中注册。在代码中,这看起来像:

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中循环执行此操作?或者我在这里出错了,我应该以另一种方式解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

有一些工具可以保留不同的版本,例如简单版本svn,也可以在线使用github,在一个解决方案中保留不同的版本并不好,你应该自动处理版本控制。此外,我更喜欢使用TFS来保留分支和不同版本。