尝试在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;
}
}
现在,我有一些不同的视图,每个视图都使用聊天中心的一个实例(例如,将其视为单独的聊天室,它们都使用了我的集线器中编写的相同逻辑)。当我进入其中一个&#34;房间&#34;我的逻辑按预期工作。但是,当我离开该页面并转到我的应用程序中的任何其他页面时,会出现问题。这是错误:
依赖项的解析失败,输入=&#34; Core.Repositories.ChatMessageRepository&#34;,name =&#34;(none)&#34;。
在解析时发生异常。
异常是:InvalidOperationException - 由于对象的当前状态,操作无效。
在例外时,容器是:
解析Repositories.ChatMessageRepository,(none)
解析参数&#34; dbFactory&#34;构造函数Repositories.ChatMessageRepository(Library.IDatabaseFactory dbFactory)
解析Context.DatabaseFactory,(无)(从Library.IDatabaseFactory映射,(无))
来自我的SignalRUnityDependencyResolver
public override Object GetService(Type serviceType)
{
return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType): base.GetService(serviceType);
}
具体是&#34; _container.Resolve(serviceType)&#34;调用
有人可以帮忙吗?
感谢。
答案 0 :(得分:0)
我通过使用HierarchicalLifetimeManager注册我的集线器来修复此问题。