Настройка статического свойства делегата из PowerShell (или передача делегата в конструктор) - PullRequest
1 голос
/ 23 августа 2010

У нас есть объект .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 Ответ

2 голосов
/ 24 августа 2010

Вы не можете получить доступ к статическим элементам через объект экземпляра (при условии, что здесь 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. Проверьте это сообщение в блоге для потенциального обходного пути .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...