Я создал небольшое расширение для дизайнера EF, которое добавляет новое свойство в окно свойств. Я сделал это с помощью проекта vsix (новый проект -> c # -> extensibility -> проект vsix). Когда я нажимаю F5, запускается экспериментальный экземпляр VS. Я создаю новый проект, добавляю модель данных объекта и добавляю объект. Тем не менее, мои точки останова никогда не попадают, и я не вижу собственность. Есть идеи, что я могу делать не так?
public class AggregateRootValue
{
internal static XName AggregateRootElementName = XName.Get("AggregateRoot", "http://efex");
private readonly XElement _property;
private readonly PropertyExtensionContext _context;
public AggregateRootValue(XElement parent, PropertyExtensionContext context)
{
_property = parent;
_context = context;
}
[DisplayName("Aggregate Root")]
[Description("Determines if an entity is an Aggregate Root")]
[Category("Extensions")]
[DefaultValue(true)]
public string AggregateRoot
{
get
{
XElement child = _property.Element(AggregateRootElementName);
return (child == null) ? bool.TrueString : child.Value;
}
set
{
using (EntityDesignerChangeScope scope = _context.CreateChangeScope("Set AggregateRoot"))
{
var element = _property.Element(AggregateRootElementName);
if (element == null)
_property.Add(new XElement(AggregateRootElementName, value));
else
element.SetValue(value);
scope.Complete();
}
}
}
}
[Export(typeof(IEntityDesignerExtendedProperty))]
[EntityDesignerExtendedProperty(EntityDesignerSelection.ConceptualModelEntityType)]
public class AggregateRootFactory : IEntityDesignerExtendedProperty
{
public object CreateProperty(XElement element, PropertyExtensionContext context)
{
var edmXName = XName.Get("Key", "http://schemas.microsoft.com/ado/2008/09/edm");
var keys = element.Parent.Element(edmXName).Elements().Select(e => e.Attribute("Name").Value);
if (keys.Contains(element.Attribute("Name").Value))
return new AggregateRootValue(element, context);
return null;
}
}
РЕДАКТИРОВАТЬ : Я положил код на Github: https://github.com/devlife/Sandbox
EDIT : После добавления компонента MEF в манифест, как это было предложено, расширение по-прежнему никогда не загружается. Вот изображение манифеста: