是否可以在Windows PowerShell中使用依赖注入(DI)?
我的初步实验表明它不是。如果我尝试在CmdLet中使用构造函数注入,它甚至不注册自身。换句话说,这是不可能的:
[Cmdlet(VerbsDiagnostic.Test,"Ploeh")] public class PloehCmdlet : Cmdlet { public PloehCmdlet(IFoo foo) { if (foo == null) { throw new ArgumentNullException("foo"); } // save foo for later use } protected override void ProcessRecord() { this.WriteObject("Ploeh"); } }
如果我添加一个默认构造函数,CmdLet可以被注册和使用,但没有默认的构造函数,它根本不可用。
我知道我可以使用服务定位器来检索我的依赖关系,但是我认为反模式不想这样做。
我希望PowerShell API有一些类似于WCF的ServiceHostFactory的“Factory”钩子,但是如果有的话,我找不到它。
每次在PowerShell中使用cmdlet时,都会从空构造函数创建cmdlet类的实例。你不能控制PowerShell会选择哪个构造函数,所以你不能以直截了当的方式来完成你所提出的建议(我真的很难想象你为什么要这样做)。所以这个问题的简单答案是否定的。
为了实现类似的效果,您可以创建一个看起来像一个cmdlet的接口(具有BeginProcessing / EndProcessing / ProcessRecord / StopProcessing),并用于在真正的代码上填充一堆是薄的包装器的cmdlet。 IMHO这将是一个过于复杂的方法。
我真的不明白你为什么要这样做。你能解释一下这个情景吗?