В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Ознакомьтесь со следующим сообщением в блоге:
Отображение подключений ASP.NET SignalR к реальным пользователям приложений
Вкратце, вы бы добавили идентификаторы подключения для пользователя в метод OnConnected
и удалите это соединение по методу OnDisconnected
. Имейте в виду, что пользователь приложения может иметь несколько подключений. Таким образом, вы должны иметь отношения один ко многим между вашим пользователем и идентификаторами соединений. Приведенный выше пост подробно объясняет это примером.
Ну, я использовал другой подход, я расширил класс ApplicationUser следующим образом:
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
{
//public int ApplicationUserId { get; set; }
//public string Name { get; set; }
//public string Address { get; set; }
//public string City { get; set; }
//public string State { get; set; }
//public string Zip { get; set; }
[Required]
public string Email { get; set; }
[Required]
public override string UserName { get; set; }
[NotMapped]
public string ConnectionId { get; set; }
[NotMapped]
public string ChattingUserConnectionId { get; set; }
//public string HomeTown { get; set; }
//public DateTime? BirthDate { get; set; }
}
И в моем хабе я делаю что-то подобное:
public class ChatHub : Hub
{
#region Data Members
private static ApplicationDbContext applicationDbContext = new ApplicationDbContext();
private static UserManager<ApplicationUser> userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(applicationDbContext));
private static List<ApplicationUser> connectedUsers = new List<ApplicationUser>();
И когда пользователь подключается к чату, я получаю его объект ApplicationUser по его имени пользователя и добавляю его в список подключенных пользователей. Когда он отключается, я удаляю его.
Я столкнулся с некоторыми случайными исключениями с состояниями EF, которые заставили меня создавать ApplicationDbContext и UserManager каждый раз, когда к ним обращаются, вместо того, чтобы устанавливать его в статическом объекте:
private ApplicationUser GetCurrentUser()
{
ApplicationDbContext applicationDbContext = new ApplicationDbContext();
UserManager<ApplicationUser> userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(applicationDbContext));
var userName = Context.User.Identity.GetUserName();
var user = userManager.FindByName<ApplicationUser>(userName);
return user;
}
Редактировать:
У кода концентратора есть некоторые проблемы с загрузкой дочерних объектов пользователя. Этот код, который также используется в шаблоне asp.net, будет работать лучше, ApplicationDBContext не требуется:
private ApplicationUserManager _userManager
{
get
{
return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
var user = _userManager.FindByName<ApplicationUser, string>(userName);