2016-03-10 6 views
0

У меня вопрос, и я не знаю, как это сделать. На самом деле, я не уверен, правильно ли это название.Как инкапсулировать метод с ограничениями общего типа

Я хочу инкапсулировать метод, который имеет общие параметры. Идея состоит в том, чтобы добавить некоторые вызовы регистрации и т. Д. Вокруг вызова метода.

Поэтому эта функция

public void Load<T>(T spObject, params Expression<Func<T, object>>[] retrievals) 
{ 
    try 
    { 
     ... .Load(spObject, retrievals);}... 
    } 
} 

должен инкапсулировать функцию, которая выглядит следующим образом.

public void Load<T>(T spObject, params Expression<Func<T, object>>[] retrievals) 
where T : ClientObject 

Where T : ClientObject должен быть удален, потому что нужно будет ссылаться на дополнительную dll в другом проекте.

Когда я пытаюсь удалить, где я получаю сообщение об ошибке говорящего

типа «T» не может быть использован в качестве параметра типа «Т» в универсальном типе или методе «Microsoft.SharePoint.Client.ClientRuntimeContext .load (T, PARAMS ...

Надежда некоторых есть идея, как я могу справиться с этим.

Спасибо :-) Greetz

+0

потому, что метод Load содержит ограничение, https://msdn.microsoft.com/en-us/library/office/ee536388.aspx, если вы удалите его из вашего метода загрузки, это может быть, что пользователь вашего метода переходят в метод ClientRuntimeContext.Load объект, который не является ClientObject –

+0

Есть ли другой способ обеспечить, чтобы объект был из ClientObject? на стороне вызова метода? –

+0

что относительно reflaction? –

ответ

0

Это не проблема инкапсуляции, а косвенная ссылка.

Если вы не»хотите связать с этим„другим“DLL, но вы все еще хотите использовать метод load, то вам необходимо напрямую ссылаться Microsoft.SharePoint.Client.ClientObject, поскольку это класс, что положение метода loadwhere необходимо использовать.

Это то, что вы урожденная добавить в исходные файлы:

using Microsoft.SharePoint.Client; 

Затем вам нужно будет добавить

Microsoft.SharePoint.Client.dll 
Microsoft.SharePoint.Client.Runtime.dll 

ваших ссылок проекта. Dll должны быть в C:\Program Files\Common Files\Microsoft Shared\SharePoint Client или в C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\ISAPI в зависимости от вашей версии sharepoint.

Этого должно быть достаточно, чтобы скомпилировать и связать вашу программу.

+0

Я знаю, что вы имеете в виду .. Спасибо. Но где я должен ссылаться на dll? Могу ли я напрямую обратиться к методу или где? –

-1

Считаете ли вы использование класса объектов динамического класса? Это позволяет определять объект во время выполнения.

public void Load(dynamic spObject, params Expression<Func<dynamic, object>>[] retrievals){ 
    .. 
} 
+0

Кажется, что динамический тип объекта не может содержать динамическую операцию, которая мне нужна в нескольких точках - –

Смежные вопросы