我正在尝试使用 MEF 为 SignalR 创建一个 DependencyResolver。到目前为止,我有以下内容:
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();
结果相同。
我在这里遗漏了一些明显的东西吗?我发现的所有样本都是针对其他容器的,而且看起来要复杂得多。
谢谢