У меня есть объект работника:состав объекта в Web API с помощью MEF
public class CreateEmployee
{
public string FirstName { get; set; }
public string LastName { get; set; }
[Import]
public ExtendEmployee ExtendEmployee { get; set; }
}
public class ExtendEmployee
{
public string Id { get; set; }
}
Я хочу продлить этот ExtendEmployee во время выполнения с помощью MEF.
[Export]
public class ExtendCreateEmployee : ExtendEmployee
{
public decimal Salary { get; set; }
}
Я хочу, чтобы заменить ExtendEmployee с ExtendCreateEmployee в моем Web API. Следовательно, используя MEF композицию, как показано ниже:
private void Compose()
{
DirectoryCatalog catalog = new DirectoryCatalog(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"), "*.dll");
CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this);
}
я называю Compose() в конструктор API.
И мой пост, как показано ниже:
public IHttpActionResult Post([FromBody] CreateEmployee employee)
{
return Created(Url.Link("DefaultApi", new { controller = "CreateEmployee" }), "success");
}
Я передаю, как JSON для метода POST:
{
"firstName": "sample string 1",
"lastName": "sample string 2",
"extendAgentCommand": {
"id": "sample string 1",
"salary": 123098
}
}
**
Проблема: "ExtendEmployee" не заменяется на «ExtendCreateEmployee» и не может получить данные «Зарплата» из json. Другими словами, MEF не компонует/не заменяет объект объектом Imported. Пожалуйста, помогите, если я делаю что-то неправильно и как я могу это достичь.
Есть ли способ, в котором я могу заменить этот ExtendEmployee с ExtendCreateEmployee во время выполнения.
Спасибо. Но есть ли способ заменить этот ExtendEmployee ExtendCreateEmployee во время выполнения. – Satyajit
Да. Вы можете создать собственное связующее -> http://blog.learningtree.com/creating-a-custom-web-api-model-binder/ или http://chimera.labs.oreilly.com/books/1234000001708/13 каналов.html # _model_binders Другой способ - использовать JObject (json.net) и обрабатывать конкретное преобразование объекта самостоятельно (используя метод ToObject). –
Спасибо, пробовал с JObject и ToObject. Он все еще не учитывает поле «зарплата» во время сопоставления. – Satyajit