2010-08-23 81 views
1

我们有一个.Net对象,它有一个静态委托(数据访问策略),必须在实例化对象之前设置它。委托也可以通过构造函数重载之一传入。从PowerShell设置静态委托属性(或将委托传递给构造函数)

我有另一个对象,有委托,我需要设置,但我无法弄清楚在PowerShell中如何做到这一点。有谁知道如何设置静态委托属性或将委托传递给PowerShell中的构造函数?

我想要做一些与此类似:

[DALObject]$db = New-Object DALObject; 
[UnitOfWork]::Strategy = $db::CreateContext; 

[DALObject]$db = New-Object DALObject; 
[UnitOfWork]$uow = New-Object UnitOfWork($db::CreateConext); 

仅供参考我试图重现媲美C#代码:

DalObject db = new DALObject(); 
UnitOfWork.Strategy = db.CreateContext; 

UnitOfWork uow = new UnitOfWork(db.CreateContext); 

编辑:为了澄清战略是一个静态的代表

Public static Func<DataContext> Strategy 

和createContext的,我想设置为委托的实例方法,通过设置静态属性,或者在方法传递给构造函数。

另一种选择是,如果有出现在PowerShell中的方式来创建在C#中的匿名委托这样的:

UnitOfWork.Strategy = delegate() 
      { 
       var ctx = db.CreateContext(); 
       return ctx; 
      }; 
+0

如果你试图像'$ db.CreateContext'那样访问'CreateContext',它可能会工作。 (从您的C#示例看起来像'CreateContext'不是静态属性,而是实例属性) – stej 2010-08-23 19:57:15

回答

2

无法通过实例对象访问静态成员(在此假设createContext的一个静态属性,尽管它被命名为一个方法)。尝试:

[DALObject]$db = New-Object DALObject; 
[UnitOfWork]::Strategy = [DALObject]::CreateContext 

,或者如果它是这样一种方法

[DALObject]$db = New-Object DALObject; 
[UnitOfWork]::Strategy = [DALObject]::CreateContext() 

OTOH如果的createContext是一个实例成员然后用或不用括号取决于它是否是一个方法或不改变[DALObject]::CreateContext$db.CreateContext

更新:在将脚本块分配给泛型委托的情况下,没有内置的方法来使其工作AFAIK。看看这个blog post for a potential work-around