微软是否有理由选择不支持.NET Core中的AppDomains?
AppDomains在构建长时间运行的服务器应用程序时特别有用,我们可能希望更新服务器加载的程序集是一种优雅的方式,而无需关闭服务器.
如果没有AppDomains,我们如何在长时间运行的服务器进程中替换我们的程序集?
AppDomains还为我们提供了一种隔离服务器代码不同部分的方法.比如,自定义websocket服务器可以在主appdomain中具有套接字代码,而我们的服务在辅助appdomain中运行.
如果没有AppDomains,则无法使用上述方案.
我可以看到一个论点,可能会讨论使用VM的云概念来处理程序集更改而不必承担AppDomains的开销.但这是微软的想法或说法吗?或者他们有针对上述情况的具体原因和替代方案?
在我读过的所有书中,他们经常说,你想要动态生成IL的情况并不多,但他们没有给出任何有意义的例子.
在看到Reflection.Emit作为游戏公司的工作要求后,我很好奇其他地方正在使用它.
我现在想知道在现实世界中是否有任何情况,这是解决问题的最佳方法.也许它被用作设计模式的实现?
注意 我想PostSharp/AOP使用它.
我有一个以下结构的枚举:
public enum DType
{
LMS = 0,
DNP = -9,
TSP = -2,
ONM = 5,
DLS = 9,
NDS = 1
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这个枚举来获取名称和值.由于需要添加更多类型,我需要从XML文件中读取类型和值.有没有办法可以从XML文件中动态创建这个枚举,这样我就可以保留程序结构.
我有一个映射String-> Integer的表.
我不是静态地创建枚举,而是想用数据库中的值填充枚举.这可能吗 ?
所以,而不是静态地删除:
public enum Size { SMALL(0), MEDIUM(1), LARGE(2), SUPERSIZE(3) };
Run Code Online (Sandbox Code Playgroud)
我想动态创建这个枚举,因为数字{0,1,2,3}基本上是随机的(因为它们是由数据库的AUTOINCREMENT列自动生成的).
我想使用创建枚举CodeDom API.我在互联网上搜索得足够多,而且我得到的结果几乎没用.
我想要产生的是
public enum bug_tracker_type
{
[Description("Bugzilla")]
Bugzilla,
[Description("Debbugs")]
Debbugs,
[Description("PHP Project Bugtracker")]
PHP_Project_Bugtracker,
[Description("Google Code")]
Google_Code
}
Run Code Online (Sandbox Code Playgroud)
我使用CodeTypeDeclaration并将其IsEnum属性设置为true,创建了一个名称,并设置了它的属性.
现在最大的问题是如何填充身体?
我试过了
CodeTypeMember mem = new CodeTypeMember();
mem.Name = WadlSharpUtils.CreateIdentifier(discreteValue.value);
mem.CustomAttributes.Add(new CodeAttributeDeclaration(discreteValue.value));
// enumCandidate is an instance of CodeTypeDeclaration
enumCandidate.Members.Add(mem);
Run Code Online (Sandbox Code Playgroud)
虽然使用这个解决方案我可以生成描述属性,但行结束;与否,
假设,为了这个例子,我试图解析一个文件,该文件指定记录中的两个任意字节代表星期几,因此:
DayOfWeek:
- 0 = Monday
- 1 = Tuesday
- 2 = Wednesday
- 3 = Thursday
- 4 = Friday
- 5 = Saturday
- 6 = Sunday
- 7-15 = Reserved for Future Use
Run Code Online (Sandbox Code Playgroud)
我可以定义一个枚举来映射到这个字段,因此:
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6
ReservedForFutureUse
}
Run Code Online (Sandbox Code Playgroud)
但是如何定义有效值ReservedForFutureUse呢?理想情况下,我想做的事情如下:
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = …Run Code Online (Sandbox Code Playgroud) 我有Windows应用程序在哪里我需要通过读取名为"Controls.txt"的文本文件在运行时填充枚举值. 作为限制,我不打算使用字典.以下是枚举MyControls中可用的默认值.我只能使用枚举.
public enum MyControls
{
Button1 = 0,
Button2 = 1,
Button3 = 2,
}
Run Code Online (Sandbox Code Playgroud)
如果Controls.txt文件可用,那么枚举的内容应该改变
public enum MyControls
{
btn1 = 0,
btn2 = 1,
btn3 = 2,
}
Run Code Online (Sandbox Code Playgroud)
我想定义一个具有有限元素集的值类型,这些元素又是运行时动态定义列表的元素(例如来自数据库).
有了这个,我希望能够在动态列表上强制执行类型安全(好吧,排序)而不需要在编译时提供任何值.然后,我可以在我的代码中使用新类型作为属性,作为方法中的返回值等.
(注意 - 它不是真正的类型 - "安全",即我追求的编译时检查,而是在方法和属性中概念性地识别"这种类型的值"的能力 - 为了更好的可理解性和代码的可读性. )
伪代码:
type Currency = ["USD", "EUR", "GBP"];
Currency cur = new Currency();
cur = "CAD"; // must throw an exception
Currency.Add("CAD");
cur = "CAD"; // now it would NOT throw an exception
Run Code Online (Sandbox Code Playgroud)
它有点像"String"的子类,但String是一个密封类,不能派生自.
您还可以将其视为定义为从列表中返回"ValueOf"函数的类型.但这并没有给我一种在C#中定义类型的方法.
有没有合理明智的方法来做我想要的事情?