该SignalR维基介绍了如何在广播从中心外的枢纽.但是,这会调用客户端操作:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.Group(group).addMessage(message);
Run Code Online (Sandbox Code Playgroud)
有没有办法调用Hub操作,理想情况是以强类型方式?例如
GetHubContext<MyHub>().Invoke(h => h.Say(message))
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过使用.NET客户端连接到集线器,但是当调用代码与集线器在同一服务器上时,这似乎是错误的.
我创建了一个具有以下属性的自定义配置部分:
private const string UseMediaServerKey = "useMediaServer";
[ConfigurationProperty(UseMediaServerKey, IsRequired = false, DefaultValue = false)]
public bool UseMediaServer
{
get { return bool.Parse(this[UseMediaServerKey] as string); }
set { this[UseMediaServerKey] = value; }
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果未在配置文件中定义属性,DefaultValue则应返回该属性.
但是,在上述情况下ArgumentNullException,抛出的bool.Parse(...)意思是即使未定义配置属性,也会执行默认访问器.
当然我可以将属性访问器更改为:
private const string UseMediaServerKey = "useMediaServer";
[ConfigurationProperty(UseMediaServerKey, IsRequired = false)]
public bool UseMediaServer
{
get {
bool result;
if (bool.TryParse(this[UseMediaServerKey] as string, out result))
{
return result;
}
return false;
}
set { this[UseMediaServerKey] = value; }
}
Run Code Online (Sandbox Code Playgroud)
但那么,该 …
我需要通过idnot将验证规则分配给特定的输入元素name。
为此,我执行以下代码:
$("#cvc").rules("add", { required: true, validateCvc: true });
$("#cardNumber").rules("add",
{ creditcard: true, messages: { creditcard: "Invalid Card Number" } });
Run Code Online (Sandbox Code Playgroud)
然而,这实际上是将规则分配给表单上的所有输入。我可以通过记录附加到不同输入的规则来验证这一点:
console.log($("#name").rules());
Run Code Online (Sandbox Code Playgroud)
输出:
Object {required: true, validateCvc: true, creditcard: true}
Run Code Online (Sandbox Code Playgroud)
看起来这可能与 jQuery Validate Unobtrusive 插件有关,我开始发现它比它的价值更麻烦。validate在添加规则之前调用设置验证的代码:
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form);
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: "input-validation-error",
errorElement: "span",
errorPlacement: $.proxy(onError, …Run Code Online (Sandbox Code Playgroud) 我使用以下正则表达式来验证 CSS 大小:
([0-9]*\.?[0-9]+)(em|px|%)
Run Code Online (Sandbox Code Playgroud)
因此,以下尺寸是有效的:
如何更改正则表达式以使单位 (em|px|%) 可选以仅允许数字?
我有许多不同类型的(例如可空对象DateTime?,Guid?),我要检查的值。
我想避免这样的代码:
return SomeGuid.HasValue || SomeBool.HasValue || SomeDateTime.HasValue
Run Code Online (Sandbox Code Playgroud)
但似乎无法创建的数组Nullable<object>。我希望做这样的事情:
return new Nullable<object>[] { SomeGuid, SomeBool, SomeDateTime }.Any(o => o.HasValue);
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的消息总线,用于排队和发布/发布事件.
我正在使用StructureMap来定位Action<T>事件的已注册处理程序(),但我不确定如何将它从StructureMap返回的对象中转换为可调用的操作.
既然我不能Action<object>说我假设Action<T>不是协变的?这可以换一种方式吗?
public class Bus
{
private ConcurrentQueue<object> events = new ConcurrentQueue<object>();
public void Queue<TEvent>(TEvent e)
{
events.Enqueue(e);
}
public void Emit()
{
object e;
while (events.TryDequeue(out e))
{
var handlerType = typeof(Action<>).MakeGenericType(e.GetType());
foreach (var handler in ObjectFactory.GetAllInstances(handlerType))
{
// how to invoke action?
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我已经将一个App_Code目录添加到我的ASP.NET MVC项目中,以便我获得插件的动态编译.
只有轻微的烦恼是,在开发新的插件时,我不会在App_Code目录中的类上获得智能感知.
目前我在项目中的另一个目录中创建它们,然后将它们复制到App_Code中.
有没有办法解决?
[更新]
我在下面贴了一个"答案".从技术上讲,这是基于我自己的规范回答问题,不需要使用工具(即智能感知)来创建插件.但是,这确实提出了一个问题,即如何在不使用App_Code的情况下实现动态编译的插件框架.由于这个问题与原版有很大的不同,我会单独提出.
这是一种安全的迭代方式ConcurrentQueue<T>吗?
while (cq.GetEnumerator().MoveNext())
{
IIndexTask task;
if (cq.TryDequeue(out task))
task.Execute(service);
}
Run Code Online (Sandbox Code Playgroud) 在CTP 4中,我们可以选择我们想要映射的属性,如下所示:
this.MapSingleType(i => new
{
i.Id,
i.OriginalFileName,
i.Extension,
i.MimeType,
i.Width,
i.Height,
i.ImageStoreLocationId,
i.AlternateText,
i.ImageData
});
Run Code Online (Sandbox Code Playgroud)
我们如何在CTP5中实现这一目标?
我尝试使用以下Map配置,但这似乎不起作用,因为我仍然必须显式忽略(this.Ignore(..))我不想映射的属性:
Map(config =>
{
config.Properties(i => new
{
i.OriginalFileName,
i.Extension,
i.MimeType,
i.Width,
i.Height,
i.ImageStoreLocationId,
i.AlternateText,
i.ImageData
});
config.ToTable("Images");
});
Run Code Online (Sandbox Code Playgroud)
考虑到新的API应该更流畅,我必须编写更多代码才能实现同样的功能.
谢谢Ben
在我的应用程序中,每个租户都有自己的StructureMap容器.
在运行时,可以关闭或重新启动租户实例.我应该做什么整理(比如调用IContainer.Dispose)或者我应该让Garbage Collection做它的工作吗?
我们确实有许多实现IDisposable的单例实例.理想情况下,我们应该在处理容器之前调用Dispose.我知道这是在嵌套容器上自动完成的,但不确定标准容器?
谢谢,
本
c# ×3
.net ×1
.net-4.0 ×1
app-code ×1
asp.net-mvc ×1
collections ×1
generics ×1
jquery ×1
regex ×1
signalr ×1
structuremap ×1