我想为使用MEF的SignalR创建一个DependencyResolver。到目前为止,我有以下几点:SignalR和MEF
public class SignalRMefDependencyResolver : DefaultDependencyResolver
{
private readonly CompositionContainer _container;
public SignalRMefDependencyResolver(CompositionContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
var export = _container.GetExports(serviceType, null, null).SingleOrDefault();
return null != export ? export.Value : base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
var exports = _container.GetExports(serviceType, null, null);
var createdObjects = new List<object>();
if (exports.Any())
{
createdObjects.Concat(exports.Select(x => x.Value));
}
createdObjects.Concat(base.GetServices(serviceType));
return createdObjects;
}
}
我觉得GetService的是工作,但GetServices未能找到IHubDescriptorProvider和IMethodDescriptorProvider出口 - 无论是在MEF或基地。
在我的Application_Start我有以下为发生第二件事 - 第一个是创建MEF容器:
RouteTable.Routes.MapHubs(new SignalRMefDependencyResolver(MefConfig.Container));
我也试过:
GlobalHost.DependencyResolver = new SignalRMefDependencyResolver(MefConfig.Container);
RouteTable.Routes.MapHubs();
与同结果。
我在这里错过了一些明显的东西吗?我发现的所有样品都用于其他容器,看起来更复杂。
感谢
你怎么知道它不工作?它如何失败? – Pete
合乎逻辑的问题:)当我遍历解析器时,它将为这两个接口返回null。另外,当我尝试从客户端启动集线器时,我的集线器未被创建。 – Jonesie
您确定这些对象在您的MEF容器中吗?什么是你的MEF设置? (你有什么设置[导入]和[导出]的东西?) – Pete