我正在为SSIS自定义管道组件编写UI编辑器。
当BIDS调用编辑器时,它会将IDTSComponentMetadata100实例传递给编辑器。如何获取对我的(托管)PipelineComponent派生实例的引用?
答案 0 :(得分:2)
我相信你想做这样的事情:
void Initialize(
IDTSComponentMetaData100 dtsComponentMetadata,
IServiceProvider serviceProvider
){
IDtsPipelineEnvironmentService pipelineService = (IDtsPipelineEnvironmentService)serviceProvider.GetService(typeof(IDtsPipelineEnvironmentService));
IDTSPipeline100 mainPipe = pipelineService.Pipeline;
// access mainPipe.PathCollection etc
TaskHost pipelineTaskHost = pipelineService.PipelineTaskHost;
MainPipe mainPipe2 = pipelineTaskHost.InnerObject as MainPipe;
// that is less direct but should work too
}
您可以使用serviceProvider执行其他有趣的操作,例如检查包的连接或变量,方法是将其他类型传递给GetService。有关详细信息,请参阅SQL2008R2 BOL。
答案 1 :(得分:0)
通过管道服务尝试了路由,但我的自定义数据流组件(用C#开发)不在IDTSPipeline100.PathCollection中 - 标准的Microsoft组件。
深入挖掘,我尝试使用mainPipe.GetObjectByID(componentID),但它返回一个COM对象而不是C#/ Managed对象。尝试投掷“你无法从COM转换为C#Managed”例外。
我无法确认,但强烈怀疑我的C#/托管自定义组件未显示在PathCollection中,因为它们是C#/托管组件与COM。