На протяжении многих лет я использовал MEF над несколькими проектами, и сегодня я обнаружил, после прочтения этих статей:Как я могу заставить RegisterBuilder работать на самом деле?
Managed Extensibility Framework Improvements in .NET 4.5 и MEF in .NET 4.5
, что в .NET 4.5 Microsoft добавлены некоторые интересные функции в MEF2; как RegistrationBuilder. Однако я не мог, для своей жизни, получить следующий очень простой пример для работы.
public class Person
{
public string Name { get; private set; }
}
class Program
{
static void Main(string[] args)
{
var p = new Program();
}
public Program()
{
var conventions = new RegistrationBuilder();
conventions.ForType<Person>().Export();
conventions.ForType<Program>().ImportProperty(p => p.Person);
var category = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(category, CompositionOptions.DisableSilentRejection);
container.SatisfyImportsOnce(this, conventions);
}
public Person Person { get; set; }
}
Из того, что я читал, похоже, что он должен просто работать, но это не так. Для того, чтобы убедиться в том, что он должен работать, я добавил [Экспорт] атрибут Person
[Export]
public class Person {...}
и атрибут [Import] свойству Program.Person
[Import]
public Person Person { get; set; }
И это сработало! Хорошо, но почему бы не работать, когда я пытался использовать только класс RegistrationBuilder?