У меня есть приложение ASP.Net, разработанное с использованием слоя пользовательского интерфейса, подключающегося к уровню обслуживания, подключающегося к бизнес-уровню и вплоть до уровня доступа к данным.Переменная доступна для нескольких проектов
Классы для слоев имеют конструкторы, принимающие UserId (int). Это в основном используется для ведения журнала, и такие вещи, как «LastUpdateUser и CreateUser».
Я работаю по часовым поясам, а в моей таблице User у меня есть TimeZoneId. На уровне пользовательского интерфейса это сохраняется в состоянии сеанса, и я могу манипулировать датами на основе их часового пояса.
Я мог бы создать метод на своем сервисе «GetTimezoneByUser» и передать ему userId, затем спустит слои на уровень доступа к данным и получит информацию о часовом поясе.
Проблема Я имею в том, что в моем объекте передачи данных, у меня есть какая-то логика, которая использует временную информацию на основе:
public class PersonDto
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Surname { get; set; }
public decimal GrossSalary { get; set; }
public string Email { get; set; }
public bool Deleted { get; set; }
public List<PersonNonAvailibilityDto> NonAvailibility { get; set; }
public string FullName
{
get { return string.Format("{0} {1}", Firstname, Surname); }
}
public string AvailableToday
{
get
{
if (NonAvailibility != null)
{
var i = NonAvailibility.FirstOrDefault(t => DateTime.UtcNow.Date <= t.EndDate && DateTime.UtcNow.Date >= t.StartDate);
if (i != null) return i.NonAvailibilityType ;
return "";
}
return "";
}
}
То, что я думаю, что мне нужно, это какой-то класс, это, доступную для всех моих слоев, который имеет общедоступный TimeZoneId, а если он равен нулю, то возьмите его из базы данных через классы доступа к данным. Но тогда мне нужно связать этот проект с моими аксессуарами.
Можно ли ссылаться на проекты в классах DTO? Они должны быть легкими. Есть ли другое «состояние», где я могу хранить часовой пояс, доступный для всех слоев? Последний и худший вариант - передать ZimeZoneID с UserId - способом, который я выполняю для всех моих конструкторов. Но это кажется плохой идеей.
Привет, см. Мой ответ здесь: http://stackoverflow.com/a/7474357/559144, я думаю, у вас должен быть сквозной проект/сборка, на который ссылаются все слои, назовите его ProjectName.Core или Projectname .Foundation, если вы предпочитаете и вставляете туда интерфейсы или легкие классы, необходимые для всех слоев. –