繁体   English   中英

自定义工作流程活动中的依赖注入

[英]Dependency injection in custom workflow activity

我有一个具有工作流程的标准应用程序。 客户可以在设计器中自定义工作流程。 现在,我们正在为特定客户进行一些自定义活动。 定制活动通过接口针对业务层进行通信。 如何为接口提供该接口的实现?

标准应用程序不知道该接口和该接口的实现是非常重要的,因为它是该特定客户的自定义代码。 该活动是通过标准工作流程找到的,因此已经可以工作了。

我看到了很多有关扩展的信息,但我真的不知道它是如何工作的。

自订活动

public sealed class GetDealerDetails : CodeActivity
{
    /////// <summary>
    /////// The dealer controller with all the businesslogic.
    /////// </summary>
    ////private readonly IDealerController _dealerController;

    [Inject]
    public IDealerController DealerController { private get; set; }

    ////public GetDealerDetails()
    ////{

    ////}

    ////[Inject]
    ////public GetDealerDetails(IDealerController dealerController)
    ////{            
    ////    _dealerController = dealerController;
    ////}

    protected override void Execute(CodeActivityContext context)
    {
        Dealer dealer = DealerController.GetDealerDetails(5);
    }
}

我在标准应用程序中使用Ninject。 我尝试使用构造函数注入和属性注入,但是它不起作用。 DealerController保持为null

编辑其余代码可在此处找到: 在标准应用程序中注入自定义代码

导入是您必须使用我随ninject提供的工作流应用程序包装器。 只有这样,我才能开展活动。 诀窍如下:不能将构造函数注入与自定义工作流程活动一起使用。 WF中的活动非常特殊。 通常,当您对工作流程进行编码后,您便会在lambda表达式中构建新的运算符,然后对其进行延迟执行。 因此,我的ninject扩展只能在活动已经建立时发挥其魔力。 因此,您需要在ninject的工作流应用程序中传递活动树的根活动。 然后,这确实在内部解析了整个活动树,并注入了所有用inject属性修饰的属性。

但是您的实际问题是我现在已修复的库中的错误。 BookmarkInfo装饰器假定始终设置范围信息,而事实并非如此。

扩展是框架为工作流中的注入提供的功能。 执行工作流程时,添加将在活动中使用的所有依赖项。

[Dependency]
public IMyService MyService{ get; set; }

WorkflowApplication instance = new WorkflowApplication(myWorkflow, inParameters);
instance.Extensions.Add(MyService);
instance.Run();

然后,您可以在活动中获取扩展名才能使用它。

protected override void Execute(NativeActivityContext context){    
    var myservice = context.GetExtension<IMyService>();
    myservice.MyMethod();
    }

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM