我想解耦我的代碼中的一些東西,這樣我就不必在子項目中也包含主項目中使用的DLL。爲此,我創建了以下方法來註冊服務(使用MS慣例的服務定位器):調用泛型方法給出編譯器錯誤
public static void RegisterService<TInterface>(SPSite site) where TInterface : IServiceLocatorRegisterable, new()
{
GetServiceLocatorConfig(site).RegisterTypeMapping<IServiceLocatorRegisterable, TInterface>(typeof(TInterface).FullName);
InvalidateCache();
所以,你看到我創建的接口「IServiceLocatorRegisterable」所以,我不是綁定到一個具體interace呢。
在次項目中,我有一個特定的接口我想與服務定位器註冊,所以我增加了「IServiceLocatorRegisterable」的聲明:
public interface ISapProcess : IServiceLocatorRegisterable
{ // details omitted.. }
而這正是我嘗試註冊代碼這個接口:
public static void RegisterSapProcess(SPSite site)
{
ServiceLocator.RegisterService<ISapProcess>(site);
}
但我不能編譯它,因爲我得到follwing編譯器錯誤:
ISapProcess must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TInterface' in the generic type or method '....RegisterService(SPSite)'
..正如我所知,當我嘗試直接註冊「基本接口」(當然這沒有任何意義,因爲我想註冊並找到特定的接口/實現),它看起來並沒有工作:
ServiceLocator.RegisterService<IServiceLocatorRegisterable>(site);
我有這種感覺,我在這裏失去了一些重要的東西。
這是微軟的SharePoint類:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint。 spsite.aspx – Patric