Первый фон.Как я могу ввести детали, специфичные для запроса, в модели
Я пытаюсь предоставить модельный API своим коллегам, который выглядит примерно так.
public class ProductFilterViewModel : ModelBase
{
[SelectItem ManagerType = typeof(UnitManager)
SelectMethod = "GetUnits"
TextProperty = "Name"
ValueProperty = "Text"]
IEnumerable<SelectListItem> UnitSelectItems { get; set; }
public IModelContext ModelContext { get; set; }
// More properties etc.
}
public interface IModelContext
{
string AccessToken { get; }
}
Пользователи моего API должны либо быть в состоянии создать новый экземпляр (с помощью метода Factory, или с использованием контейнера Ninject, либо в порядке), либо экземпляры этой оценки для параметра контроллера и имеют следующие произойдет - свойства, связанные с [SelectItem], должны быть заполнены, и должен быть введен экземпляр IModelContext.
public class SomeController : Controller
{
public ActionResult Index()
{
// or whatever
ProductFilterViewModel model = this.Container.Get<ProductFilterViewModel>();
return View(model);
}
[HttpPost]
public ActionResult Index(ProductFilterViewModel model)
{
model.RunSearch(); // will internally use model.ModelContext.AccessToken;
return View(model);
}
}
Теперь свойство маркера доступ происходит из печенья и имеет важное значение для любого доступа к базе данных, которая происходит в рамках модели - в том числе автоматического населения этих свойств, приписываемых с [SelectItem]
я могу получить эту работу с идеальной привязкой к модели. Там, где я борюсь, как это сделать в случае без привязки без дублирования кода. В идеале модельное связующее будет использовать один и тот же завод/контейнер. Я попытался настроить вещи через DependencyResolver.Current, но потом я изо всех сил пытался настроить контейнер для ввода этого AccessToken из файла cookie во время запроса. Единственная другая идея, которую я имел, заключалась в том, чтобы сконфигурировать контейнер в классе ControllerBase, а затем получить доступ к нему из ControllerContext в моем связующем устройстве, но это кажется нехорошим.