这是原始问题的简化版本.
我有一个名为Person的类:
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public int Weight { get; set; }
public DateTime FavouriteDay { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......然后说一个例子:
var bob = new Person {
Name = "Bob",
Age = 30,
Weight = 213,
FavouriteDay = '1/1/2000'
}
Run Code Online (Sandbox Code Playgroud)
我想在我最喜欢的文本编辑器中将以下内容写成字符串 ....
(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3
Run Code Online (Sandbox Code Playgroud)
我想取这个字符串和我的对象实例并评估一个TRUE或FALSE - 即在对象实例上评估一个Func <Person,bool>.
这是我目前的想法:
寻找书籍,博客,网站或视频.
目前,我从Udi Dahan和Greg Young的博客中获得了很多价值,但我想知道是否还有其他专家值得一试?
无论如何,如果主端点死亡,是否有配置故障转移端点的WCF服务?有点像能够在SQL集群中指定故障转移服务器.
具体来说,我使用TCP/IP绑定来提高速度,但是在极少数情况下机器不可用我想将流量重定向到故障转移服务器.丢失消息并不是太麻烦.我只是不想编写代码来处理重新路由.
ASP.NET MVC控制器是否有可能创建不同控制器的新实例并有效地将其重新委托给它?
比方说,我在/ Controllers /目录中有两个控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var otherController = new OtherController();
return otherController.ShowNumberOfThings(100);
}
}
public class OtherController : Controller
{
public ActionResult ShowNumberOfThings(int index)
{
return View(index);
}
}
Run Code Online (Sandbox Code Playgroud)
...和一个名为Views/Other/ShowNumberOfThings.aspx的视图:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="ViewPage<int>" %>
Number of things: <%= Model.ToString() %>
Run Code Online (Sandbox Code Playgroud)
当我点击网址时:
我希望看到一个页面:
"事情数量:100"
我希望能够在控制器重定向之间保留临时数据,而不必强制使用会话对象(TempData [""]使用会话对象进行跨控制器重定向).我的真实案例有一个复杂的对象需要传递(不仅仅是一个int),所以使用URL/Cookie是不可能的,会话状态是禁止的.
在WebForms中,我们至少可以使用Server.Transfer并维护HttpContext.Items集合中的任何状态.在MVC中,我能看到的唯一选择是直接调用控制器方法传递必需的参数.
目前,由于"上下文"仍在HomeController下运行,因此无法尝试解析视图文件夹.
我想我要去的地方就是试图将ASP.NET MVC搞得像FrontContoller一样.
有任何想法吗?
编辑
最后,我们必须将所有内容序列化为一个会话并使用它.遗憾,但我听说MVC2将支持将对象序列化为ViewState.
我有一个要求,我需要存储一个项目列表的简单缓存.我正在使用List <T>来实现此目的,但我们现在已经改变了设计以适应多个线程.
系统的体系结构由事件驱动,因此读写操作很可能会发生冲突.由于绝大多数访问都是只读的,我认为ReaderWriterLockSlim可能是一个很好的候选者.缓存只需要在该时刻的读取点准确.
我已经编写了下面的代码,似乎工作正常,但是有一些潜在的痛点吗?
更新:虽然下面的代码确实解决了一些同步问题,但它并非100%完美.我已经决定实现一个更简单的类,它不会暴露所有的IList <T>操作,因此重新使用它会更"安全".
public class SynchronisedList<T> : IList<T>
{
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private IList<T> innerCache = new List<T>();
private U ReadReturn<U>(Func<U> function)
{
cacheLock.EnterReadLock();
try { return function(); }
finally { cacheLock.ExitReadLock(); }
}
private void Read(Action action)
{
cacheLock.EnterReadLock();
try { action(); }
finally { cacheLock.ExitReadLock(); }
}
private U WriteReturn<U>(Func<U> function)
{
cacheLock.EnterWriteLock();
try { return function(); }
finally { cacheLock.ExitWriteLock(); }
}
private void Write(Action action)
{
cacheLock.EnterWriteLock();
try { action(); …
Run Code Online (Sandbox Code Playgroud) c# ×3
soa ×2
.net ×1
antlr ×1
architecture ×1
asp.net-mvc ×1
controller ×1
dsl ×1
eda ×1
event-driven ×1
generics ×1
lambda ×1
list ×1
messaging ×1
predicate ×1
wcf ×1