我们有一个.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;
};
答案 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。