Mas*_*low 9 .net static-methods mef
我可以在类的静态构造函数中加水吗?
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);
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ted 15
不,MEF不支持静态导入.
这比我想象的要容易。
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>>>( );
}
Run Code Online (Sandbox Code Playgroud)
将类型更改为,Action<IEnumerable<ProjectLogicChecks>>
以便我可以显示多个项目或整个解决方案的结果,而不仅仅是一个。
我按照这篇文章获取静态属性集,然后在没有扩展名的情况下提供本地默认值。
归档时间: |
|
查看次数: |
4884 次 |
最近记录: |