zoukankan      html  css  js  c++  java
  • 后台代码版本控制

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Manjinba.Communication.Common.Attributes
    {
    /// <summary>
    ///
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class IMVersionAttribute : Attribute
    {
    /// <summary>
    ///
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    ///
    /// </summary>
    /// <param name="name"></param>
    public IMVersionAttribute(string name)
    {
    Name = name;
    }
    }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using Manjinba.Communication.Common.Attributes;

    namespace Manjinba.Communication.Common.Utils
    {
    /// <summary>
    ///
    /// </summary>
    public class VersionManager
    {
    /// <summary>
    ///
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="assembly"></param>
    /// <param name="version"></param>
    /// <returns></returns>
    public static T GetInstance<T>(Assembly assembly, string version) where T : class
    {
    T result = default(T);
    Type type = typeof(T);
    var types = assembly.GetTypes().Where(a => type.IsAssignableFrom(a));
    List<string> versions = new List<string>();

    foreach (var c in types)
    {
    IMVersionAttribute attr = (IMVersionAttribute)c.GetCustomAttribute(typeof(IMVersionAttribute));
    if (attr == null)
    {
    if (string.IsNullOrEmpty(version))
    {
    return (Activator.CreateInstance(c) as T);
    }
    }
    else
    {
    if (version == attr.Name)
    {
    return (Activator.CreateInstance(c) as T);
    }
    versions.Add(attr.Name);
    }
    }

    if (versions.Count > 0)
    {
    versions.Sort();
    string maxVersion = versions[versions.Count - 1];
    foreach (var c in types)
    {
    IMVersionAttribute attr = (IMVersionAttribute)c.GetCustomAttribute(typeof(IMVersionAttribute));
    if (attr != null && attr.Name == maxVersion)
    {
    return (Activator.CreateInstance(c) as T);
    }

    }
    }
    return result;
    }
    }
    }

    调用:

    IUserRepository userRepository = VersionManager.GetInstance<IUserRepository>(assembly, request.version);

  • 相关阅读:
    python 全栈开发,Day13(迭代器,生成器)
    python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)
    python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)
    关于1024:堆栈下溢的错误(1024. Stack Underflow Occurred)
    Quick 3.3 final 加载ccs的变化
    Quick 3.3 的代码资源加密
    quick code ide设置分辨率
    quick3.3rc1导入工程到ADT
    lua 基本语法
    as3 阻止后续侦听器
  • 原文地址:https://www.cnblogs.com/Nine4Cool/p/10540870.html
Copyright © 2011-2022 走看看