0

我想在我的代码中解耦一些东西,这样我就不必在子项目中包含主项目中使用的 DLL。为此,我创建了以下方法来注册服务(使用 MS Common Practices Service Locator):

public static void RegisterService<TInterface>(SPSite site) where TInterface : IServiceLocatorRegisterable, new()
        {
            GetServiceLocatorConfig(site).RegisterTypeMapping<IServiceLocatorRegisterable, TInterface>(typeof(TInterface).FullName);
            InvalidateCache();

因此,如您所见,我创建了接口“IServiceLocatorRegisterable”,因此我还没有绑定到特定的接口。

在子项目中,我有一个特定的接口,我想向服务定位器注册,所以我在声明中添加了“IServiceLocatorRegisterable”:

public interface ISapProcess : IServiceLocatorRegisterable
{ // details omitted.. }

这是我尝试注册此接口的代码:

public static void RegisterSapProcess(SPSite site)
{
    ServiceLocator.RegisterService<ISapProcess>(site);
}

但我无法编译它,因为我得到以下编译器错误:

ISapProcess 必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法“....RegisterService(SPSite)”中将其用作参数“TInterface”

..据我所知,当我尝试直接注册“基本接口”时,它不起作用(这当然没有任何意义,因为我想注册并找到特定的接口/实现):

ServiceLocator.RegisterService<IServiceLocatorRegisterable>(site);

我觉得我在这里遗漏了一些重要的东西。

4

1 回答 1

2

是的 - 看看你的约束:

where TInterface : IServiceLocatorRegisterable, new()

你不能写:

ISapProcess x = new ISapProcess();

你能?这就是约束所需要的。

要么需要放弃约束,要么更改您的类型参数。(鉴于您提供的代码,尚不清楚您要做什么。)

于 2012-12-13T10:19:49.510 回答