从PowerShell设置静态委托属性(或将委托传递给构造函数)

时间:2010-08-23 19:42:54

标签: powershell delegates

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

我有另一个具有我需要设置的委托的对象,但我无法在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;
            };

1 个答案:

答案 0 :(得分: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,不管是否为parens。

更新:如果将脚本块分配给通用委托,则没有内置方法可以使此工作AFAIK。看看这个blog post for a potential work-around