【发布时间】:2012-03-31 15:20:00
【问题描述】:
我使用 Unity 作为我的 DI 容器,但在解析 SignalR 集线器时我无法让它工作。有没有人在这方面取得成功?我尝试了以下方法:
public class UnityDependencyResolver : DefaultDependencyResolver
{
private readonly IUnityContainer _Container;
public UnityDependencyResolver (IUnityContainer container)
{
_Container = container;
//edit to add
container.RegisterInstance<IJavaScriptMinifier>(NullJavaScriptMinifier.Instance);
}
public override object GetService(Type serviceType)
{
return base.GetService(serviceType) ?? _Container.Resolve(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
return base.GetServices(serviceType) ?? _Container.ResolveAll(serviceType);
}
}
但我收到一条错误消息,表明它无法解析 SignalR.Infrastructure.IJavaScriptMinifier
【问题讨论】:
-
您是否在 Unity 中注册了
IJavaScriptMinifier的实现? -
我在发布此内容后尝试过,但感觉就像是 hack。 (我将编辑帖子以显示如何)。我没有明确使用它,它是一个 SignalR 接口。
-
也许你没有在你的应用程序中明确使用它。但是,如果您的基础设施依赖于它并且 SignalR 使用
DependencyResolver来获得IJavaScriptMinifier的实现,则您需要在您的容器中注册它。我不会在解析器的构造函数中注册它,而是在应用程序的应用程序根目录中与所有其他依赖项一起注册。 -
SignalR 需要很多东西,而 DefaultDependencyResolver 包括这些东西(例如 IHubLocator、IHubFactory 和许多其他东西)。我不必注册那些。我想这可能只是一个错误。不过,我真的很感谢你的 cmets :)
-
抱歉,我忽略了当
DefaultDependencyResolver无法提供给定服务时,您只使用 Unity 作为后备。默认解析器中是否有任何类型的Initialize例程不会被您的自定义解析器调用?