#c# #asp.net-mvc #modelbinders
#c# #asp.net-mvc #modelbinders
Вопрос:
У меня есть пользовательская привязка к контракту, которая проверяет, может ли мой зарегистрированный пользователь просматривать этот контракт и существует ли контракт. Я хотел бы иметь другую привязку, которая проверяет, существует ли контракт и исправен ли токен, поскольку пользователю не нужно входить в систему.
Возможно ли иметь 2 привязки к одному и тому же объекту? Как мне это сделать?
Ответ №1:
Обновить:
Я проверил источник, у вас не может быть двух пользовательских привязок модели к одному типу. Я запутался с поставщиками ценностей.
По сути, у вас есть два варианта, один из которых — создать одно большое связующее для моделей (что, я думаю, является лучшим вариантом).
другой вариант — создать поставщика привязки модели, который возвращает modelbinder для конкретных нужд.
public class ContractModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(Type modelType)
{
if(modelType == typeof(Contract))
{
if(LoggedIn)
{
return new LoggedInContractBinder();
}
else
{
return new NotLoggedContractBinder();
}
}
return null;
}
}
затем вам нужно зарегистрировать его в вашем контейнере DependencyResolver / IOC или добавить это (в Global.asax — app start):
ModelBinderProviders.BinderProviders.Add(new ContractModelBinderProvider());
Я бы дважды подумал о наличии логики авторизации в привязке модели.