如何构建.Net项目?通用代码,由不同项目共享

时间:2018-03-20 07:55:15

标签: c# asp.net asp.net-mvc oop

我在不同的Visual Studio解决方案中的两个不同项目中使用相同的常量。

项目1是ASP.NET WEB API和
项目2是客户端Web应用程序。

常数示例:
1. BUYING_RATE
2. THRESHOLD_LIMIT

我的问题是。

我应该创建一个新的库项目来处理常量并在两个项目中共享这个dll吗?我想避免 duplacate代码在两个不同的项目中

注1:由于某些限制,我无法在一个解决方案中添加这两个项目(API项目和客户端项目),因此请忽略此 注2:这两个项目都由我管理

另一种情况是。 ASP.NET WEB API也将被第三方使用。所以我应该向他们提供dll-s或API文档就足够了。

或者我在设计上错了。如果是有更好的解决方案,那么还有其他选择来解决这个问题

提前致谢

1 个答案:

答案 0 :(得分:1)

  1. 您可以使用NuGet来共享常量,但我不会。主要问题是您必须事先计划您的常量,否则NuGet出版将延迟您的进度。

  2. 使用共享库时,请考虑使用变量而不是常量。通常情况下,您需要更改常量值,并且不希望发出完全重建。常量值将编译到引用它们的程序集中。变量在运行时得到评估。

  3. 制作共享库时,请考虑提供静态可访问的实例容器。它通常可用于为不同的读者实例提供不同的半常数值集。

    //Constant-provider assembly code. Separate library that is.
    public class MyConstants
    {
        //Gets compiled into user code. Changing value -> rebuild all clients.
        //public const double BUYING_RATE = 0.5;
    
        //Gets evaluated in run-time. Changing value -> clients get new value.
        public readonly double BUYING_RATE = 0.5;
    
        private static MyConstants _default;
        static MyConstants()
        {
            _default = new MyConstants();
        }
    
        //Provide default instance. You can change it in run-time when needed.
        public static Default
        {
            get
            {
                return _default;
            }
        }
    }
    
    //Constant-user assembly code. Sample usage code for reader assemblier.
    private class User
    {
        public void Method1()
        {
            ... = MyConstants.Default.BUYING_RATE;
        }
    }