저는 MEF와 함께 일하고 있습니다. 내가 PRISM에서 MVVM RI라고 데모를보고 있었다, 프로그램의 일부가이 코드를 가지고 : 내 소프트웨어에서MEF를 사용하여 가져 오기없이 매개 변수를 생성자에 전달하는 방법은 무엇입니까?
/// <summary>
/// Factory class to create a question view model for a given question object.
/// </summary>
private static class QuestionViewModelFactory
{
private static Dictionary<Type, Func<Question, QuestionViewModel>> maps = new Dictionary<Type, Func<Question, QuestionViewModel>>()
{
{ typeof(OpenQuestion), (q) => new OpenQuestionViewModel((OpenQuestion)q) },
{ typeof(MultipleSelectionQuestion), (q) => new MultipleSelectionQuestionViewModel((MultipleSelectionQuestion)q) },
{ typeof(NumericQuestion), (q) => new NumericQuestionViewModel((NumericQuestion)q) }
};
public static QuestionViewModel GetViewModelForQuestion(Question question)
{
Func<Question, QuestionViewModel> viewModelInstanceFactory = null;
if (maps.TryGetValue(question.GetType(), out viewModelInstanceFactory))
{
return viewModelInstanceFactory(question);
}
else
{
throw new ArgumentOutOfRangeException("Could not locate a view model for question type");
}
}
}
// Note that each class derived QuestionViewModel needs a constructor parameter to be created.
public abstract class QuestionViewModel : NotificationObject
{
protected QuestionViewModel() { ... }
}
public abstract class QuestionViewModel<T> : QuestionViewModel
where T : Question
{
protected QuestionViewModel(T question) { ... }
}
을,이 기능이 필요하지만 지금은 발견에 의해 수행하고 싶습니다.
처음에는 QuestionViewModel
만 저장하고 질문 유형 모델 contractName
으로 저장하는 사용자 지정 내보내기를 만들려고했습니다. 이것을 확인하십시오.
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class ExportViewModelForProblemAttribute : ExportAttribute
{
public ExportViewModelForProblemAttribute(Type viewModelType, Type questionType)
: base(questionType.ToString(), typeof(QuestionViewModel))
{
}
}
그런데 어떻게 생성자가 객체를 전달할 수 있습니까? 아이디어는 가져 오기를 사용하지 않고 객체 q
을 전달하는 것입니다. 그러나 나는이 부분에서 길을 잃었다.
public class ProblemViewModelFactory
{
private readonly CompositionContainer container;
[ImportingConstructor]
public ProblemViewModelFactory(CompositionContainer container)
{
this.container = container;
}
public QuestionViewModelFactory GetQuestionViewModelFactory(Question question)
{
// what can I do to return the correspond view model with the question inside?
}
}
이 매핑을 구현하고 인수를 전달하려면 어떻게해야합니까? 미리 감사드립니다.
답변 주셔서 감사합니다.하지만 QuestionViewModel에 Question 개체 매개 변수가있는 방법을 이해하지 못하고있는 것 같습니다. ExportFactory와 Metadata 태그를 조금 혼란스럽게합니다. –