【问题标题】:SignalR Hub ResolutionFailedException with UnitySignalR Hub ResolutionFailedException 与 Unity
【发布时间】:2014-02-19 06:08:18
【问题描述】:

尝试在 MVC Web 应用程序中使用 Unity 解析 SignalR 集线器时,我遇到了一个非常烦人的 ResolutionFailedException 错误。我的代码如下所示。

我的引导程序类

public static class Bootstrapper
{
    public static IUnityContainer Initialise()
    {
        var container = BuildUnityContainer();
        var unityDependencyResolver = new UnityDependencyResolver(container);

        //Used for MVC
        DependencyResolver.SetResolver(unityDependencyResolver);

        //Used for SignalR
        GlobalHost.DependencyResolver = new SignalRUnityDependencyResolver(container);

        return container;
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>(); 

        RegisterTypes(container);

        return container;
    }

    public static void RegisterTypes(IUnityContainer container)
    {

        //Repositories
        
        container.RegisterType<ChatMessageRepository>();
        

        //Services 
        container.RegisterType<CapturePoolService>();
        container.RegisterType<HistoricalDataService>();

        //Context
        container.RegisterType<ICustomPrincipal, CustomPrincipal>(new PerRequestLifetimeManager());
        container.RegisterType<IDatabaseFactory, DatabaseFactory>(new PerRequestLifetimeManager());
        container.RegisterType<UnitOfWork>(new PerRequestLifetimeManager());

        //Hubs
        container.RegisterType<ChatHub>(new InjectionFactory(CreateChatHub));

    }

    private static object CreateChatHub(IUnityContainer container)
    {
        return new ChatHub(container.Resolve<ChatMessageRepository>(), container.Resolve<UnitOfWork>());
    }

}

我的聊天中心

public class ChatHub : Hub
{
    private readonly ChatMessageRepository _chatMessageRepository;
    private readonly UnitOfWork _unitOfWork;

    public ChatHub(
        ChatMessageRepository chatMessageRepository,
        UnitOfWork unitOfWork)
    {
        _chatMessageRepository = chatMessageRepository;
        _unitOfWork = unitOfWork;
    }

}

现在,我有几个不同的视图,每个视图都使用聊天中心的一个实例(例如,将其视为单独的聊天室,它们都使用了在我的中心中编写的相同逻辑)。当我进入其中一个“房间”时,我的逻辑按预期工作。但是,当我离开该页面并转到我的应用程序中的任何其他页面时,就会出现问题。这是错误:

依赖解析失败,type = "Core.Repositories.ChatMessageRepository", name = "(none)"。

在解决时发生异常。

异常是:InvalidOperationException - 由于对象的当前状态,操作无效。


发生异常时,容器为:

正在解析 Repositories.ChatMessageRepository,(none)

解析构造函数Repositories.ChatMessageRepository(Library.IDatabaseFactory dbFactory)的参数“dbFactory”

Resolving Context.DatabaseFactory,(none) (映射自Library.IDatabaseFactory, (none))

从我的 SignalRUnityDependencyResolver 触发

public override Object GetService(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType): base.GetService(serviceType);
    }

特别是“_container.Resolve(serviceType)”调用。

有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc dependency-injection unity-container signalr


    【解决方案1】:

    我通过向 HierarchicalLifetimeManager 注册我的集线器来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多