Могу ли я гидрировать это внутри класса? s статический конструктор?
public class Connect:IDTExtensibility2, IDTCommandTarget
static Connect()
{
//hydrate static properties?
}
[Import]
public static Action<ProjectLogicChecks> Display { get; set; }
[Export(typeof(Action<ProjectLogicChecks>))]
private static void DisplayResults( CheckProcesses _checkResults)
{
MessageBox.Show(_checkResults.ProjectLogicCheck.AssemblyName + " has problems=" +
_checkResults.ProjectLogicCheck.HasProblems);
}
Это оказалось проще, чем я думал.
static Connect()
{
var batch = new CompositionBatch( );
CompositionContainer container;
var reflectionCatalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly( ));
var extensionPath = System.IO.Path.Combine(Environment.CurrentDirectory, "extensions");
if (System.IO.Directory.Exists(extensionPath))
{
var directoryCatalog = new DirectoryCatalog(extensionPath);
var defaultCatalogEp = new CatalogExportProvider(reflectionCatalog);
container=new CompositionContainer(directoryCatalog, defaultCatalogEp);
defaultCatalogEp.SourceProvider=container;
}
else
container = new CompositionContainer(reflectionCatalog);
container.Compose(batch);
//Setting a static property
Display=container.GetExportedValue<Action<IEnumerable< ProjectLogicChecks>>>( );
}
Изменил тип на Action
, чтобы я мог отображать результаты для нескольких проектов или целого решения, а не только для одного.
Я следовал этой статье, чтобы установить статическое свойство, затем этой, чтобы обеспечить локальные значения по умолчанию в случае отсутствия расширения.