gpt4 book ai didi

asp.net-mvc - SignalR Hub ResolutionFailedException 与 Unity

转载 作者:行者123 更新时间:2023-12-02 09:59:33 26 4
gpt4 key购买 nike

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

我的 Bootstrap 类

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;
}

}

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

Resolution of the dependency failed, type = "Core.Repositories.ChatMessageRepository", name = "(none)".

Exception occurred while: while resolving.

Exception is: InvalidOperationException - Operation is not valid due to the current state of the object.


At the time of the exception, the container was:

Resolving Repositories.ChatMessageRepository,(none)

Resolving parameter "dbFactory" of constructor Repositories.ChatMessageRepository(Library.IDatabaseFactory dbFactory)

Resolving Context.DatabaseFactory,(none) (mapped from Library.IDatabaseFactory, (none))

它由我的 SignalRUnityDependencyResolver 触发

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

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

有人可以帮忙吗?

谢谢。

最佳答案

我通过向 HierarchicalLifetimeManager 注册我的集线器解决了这个问题。

关于asp.net-mvc - SignalR Hub ResolutionFailedException 与 Unity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com