【发布时间】:2014-03-20 06:37:54
【问题描述】:
我正在尝试使用 Castle DynamicProxy 来实现 SignalR Hub 的类型安全版本。 目标是当我使用 Clients.All 而不是获取动态对象时,我有一个可以使用的接口。
目前的代码相当老套,但我想证明它会在我费尽周折把它弄好之前证明它可以工作:
public interface IChatClient
{
void broadcastMessage(string name, string message);
}
public class ChatHub : TypeSafeHub<IChatClient>
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
public abstract class TypeSafeHub<TInterface> : Hub where TInterface:class
{
public new TypeSafeHubCallerConnectionContext<TInterface> Clients
{
get
{
return new TypeSafeHubCallerConnectionContext<TInterface>(base.Clients);
}
}
}
public class TypeSafeHubCallerConnectionContext<T> where T:class
{
private IHubCallerConnectionContext context;
private ProxyGenerator proxyGen;
public TypeSafeHubCallerConnectionContext(IHubCallerConnectionContext context)
{
this.context = context;
proxyGen= new ProxyGenerator();
}
public T All
{
get
{
return proxyGen.CreateInterfaceProxyWithTarget<T>(context.All);
}
现在当我返回代理时它失败了,因为目标没有实现接口。
有没有一种简单的方法可以实现这个目标,或者我应该考虑使用 InterfaceProxyWithoutTarget 并使用拦截器来连接对动态的调用。
【问题讨论】:
标签: c# signalr signalr-hub castle-dynamicproxy