Usando o Unity IoC para registrar e resolver hubs do SignalR
Acho que estou perdendo algo muito simples e talvez apenas precise de um novo par de olhos. Eu tenho um aplicativo ASP.NET MVC. Nesse aplicativo, estou usando o Unity no meu IoC para lidar com a injeção de dependência. Cada um dos meus repositórios precisa ter uma fábrica de banco de dados injetada nele e cada fábrica de banco de dados precisa ter um principal injetado nele. Até agora, tenho utilizado o PerRequestLifetimeManager para registrá-los.
//Repositories
container.RegisterType<ChatMessageRepository>(new PerRequestLifetimeManager());
container.RegisterType<SignalRConnectionRepository>(new PerRequestLifetimeManager());
//Context
container.RegisterType<IPrincipal, Principal>(new PerRequestLifetimeManager());
container.RegisterType<IDatabaseFactory, DatabaseFactory>(new PerRequestLifetimeManager());
container.RegisterType<UnitOfWork>(new PerRequestLifetimeManager());
Logicamente, tentei registrar meu Hub da mesma maneira.
container.RegisterType<ChatHub>(new PerRequestLifetimeManager());
No entanto, sempre que executo o aplicativo e saio da página de bate-papo, recebo a exceção "Falha na resolução da dependência" e a InnerException diz "A operação não é válida devido ao estado atual do objeto". Também tentei usar os gerenciadores Unity padrão (Transient), PerResolve e ContainerControlled ao registrar esses caras e parece que não consigo resolver o meu problema.
Alguém poderia me fornecer algum código de demonstração de como você usou o Unity em um aplicativo ASP.NET MVC para lidar com a injeção de dependência em seus hubs de sinal?
Aqui é onde o Unity injeta parâmetros no meu Hub SignalR
public class ChatHub : Hub
{
private readonly ChatMessageRepository _chatMessageRepository;
private readonly SignalRConnectionRepository _signalRConnectionRepository;
private readonly UnitOfWork _unitOfWork;
public ChatHub(ChatMessageRepository chatMessageRepository,
SignalRConnectionRepository signalRConnectionRepository,
UnitOfWork unitOfWork)
{
_chatMessageRepository = chatMessageRepository;
_signalRConnectionRepository = signalRConnectionRepository;
_unitOfWork = unitOfWork;
} ... }
Obrigado!