наличие 2 пользовательских связующих моделей на одном объекте

#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());
  

Я бы дважды подумал о наличии логики авторизации в привязке модели.