使用IUnityContainer作为工作流活动(WF 4.0)的扩展是否可以?
protected override bool Execute(CodeActivityContext context)
{
var container = context.GetExtension<IUnityContainer>();
var db = container.Resolve<IDatabaseContext>();
// ...
}
请给我一个如何做正确的例子。
答案 0 :(得分:3)
我不会将容器放在扩展名单中。只需获得您真正需要的扩展名 IDatabaseContext 。通常会更好。
关于包含依赖注入框架的最佳方法,一种方法是将WorkflowApplication或WorkflowInvoker对象包装在支持Unity的实用程序类中,并将所有接口/类型作为内部WorkflowApplication的扩展提供。
另一个建议是在您的活动的CacheMetadata方法中注册所需的扩展名。此方法用于在执行工作流之前验证工作流程。
public sealed class SampleActivity : CodeActivity
{
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
// Require the IDatabaseContext extension to be defined in the workflow host
// application. The workflow will fail validation if an extension with this
// interface is not provided.
metadata.RequireExtension<IDatabaseContext>();
}
protected override void Execute(CodeActivityContext context)
{
var dbContext = context.GetExtension<IDatabaseContext>();
}
}
public interface IDatabaseContext
{
}
答案 1 :(得分:0)
This thread提供了解释如何实现所需内容的代码示例和链接。
答案 2 :(得分:0)
public sealed class SampleActivity : CodeActivity
{
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
// Require the IDatabaseContext extension to be defined in the workflow host
// application. The workflow will fail validation if an extension with this
// interface is not provided.
metadata.RequireExtension<IDatabaseContext>();
}
protected override void Execute(CodeActivityContext context)
{
var dbContext = context.GetExtension<IDatabaseContext>();
}
}
public interface IDatabaseContext
{
}