我想在我的代码中解耦一些东西,这样我就不必在子项目中包含主项目中使用的 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);
我觉得我在这里遗漏了一些重要的东西。