我基本上试图对为TFS构建工作流开发的一些自定义活动进行一些控制反转。
我听说过WF通过ActivityContext.GetExtension<T>
method支持服务定位器模式,但是我无法找到关于在运行时运行该主机的主机上注册自定义“扩展”对象的位置/时间的引用建立过程。
我觉得这与IIS托管工作流服务的情况类似,其中one needs to write a custom WCF behavior for injection of extensions into the host,但我在TFS构建过程中没有看到相同的情况。
答案 0 :(得分:1)
看看
http://msdn.microsoft.com/en-us/library/vstudio/system.activities.codeactivity(v=vs.100).aspx 您可以在自定义活动中覆盖此CodeActivity.CacheMetadata(CodeActivityMetadata)方法
传递的参数使您可以访问扩展和其他上下文项 http://msdn.microsoft.com/en-us/library/vstudio/system.activities.codeactivitymetadata(v=vs.100).aspx AddDefaultExtensionProvider
我使用了&#39; init&#39;将自定义项目注入上下文并在其他活动中重复使用此项目的活动,请注意工作流程是否持续存在&#39;跨越构建确保您的活动重置状态或将其考虑在内。
2个应该可用且在tfs构建中有用的扩展默认模板是IBuildDetail和IBuildEnvironment(名称可能是错误的)。您可以将数据存储在BuildDetails BuildInformation节点中,您可以从此处访问tfs api服务或其属性。 BuildEnvironment包含已加载的程序集文件夹等信息,可能有助于将某些内容作为文件加载。
请注意,这适用于tfs 2010,可能会有变化,我非常确定如何实现注射更好的方法。