我实现了一个接口IService
,它继承了一系列其他接口的功能,并作为许多不同服务的共同基础。
每个服务都由接口描述,例如:
public interface IServiceOne : IService
{
//...
}
public class ServiceOne : IServiceOne
{
//...
}
到目前为止的一切都按预期工作:
IServiceOne serviceOne = new ServiceOne();
IServiceTwo serviceTwo = new ServiceTwo();
我现在要做的是为每个服务添加一个大的常量(公共变量)列表,但是每个服务类型会有所不同(例如,IServiceOne
将具有与{不同的常量} {1}},IServiceTwo
中将存在IServiceOne
中不存在的常量等。
我想要达到的目标是:
IServiceTwo
仅仅因为变量因服务类型而异,我决定为每个变量实现一个额外的接口:
IServiceOne serviceOne = new ServiceOne();
var someConstantValue = serviceOne.Const.SomeConstant;
然后扩大我的public interface IServiceOneConstants
{
//...
}
定义:
IService
我现在遇到的问题是我不知道如何实现public interface IServiceOne : IService, IServiceOneConstants
{
//...
}
public class ServiceOne : IServiceOne
{
//...
}
的具体类。显然,当它的一个变量(我们在这里称它们为常量)将被调用时,它必须被实例化,所以最初我虽然是IServiceOneConstants
类但是你不能暴露static
类&#39 ;通过界面的功能。然后,我尝试使用static
进行操作,并通过公共非静态包装器公开其singleton
:
instance
然后我调整public class Singleton : IServiceOneConstants
{
private static Singleton _instance;
private Singleton()
{
SomeConstant = "Some value";
}
public static Singleton Instance
{
get
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
public String SomeConstant { get; set; }
public Singleton Const
{
get
{
return Instance;
}
}
}
就像那样:
IServiceOneConstants
但是当我这样称呼时:
public interface IServiceOneConstants
{
Singleton Const { get; }
}
我收到IServiceOne serviceOne = new ServiceOne();
var someConstantValue = serviceOne.Const.SomeConstant;
个异常,因为null reference
为空。
我在这里缺少什么?
答案 0 :(得分:1)
通过命名不同的东西同名,你真的帮助自己变得困惑;)
所以,首先...... 你要做的是通过实例属性访问单例实例:
public Singleton Const
{
get
{
return Instance;
}
}
然后你就像使用它一样:
serviceOne.Const
但该变量从未分配过。为了分配它,你应该创建一个Singleton类的实例,将它分配给serviceOne.Const属性然后你可以使用它。
你需要的可能是这样的:
public class ServiceOne : IServiceOne
{
public Singleton Const
{
get
{
return Singleton.Instance;
}
}
}
答案 1 :(得分:0)
您需要检查单身是否已在ServiceOne.Const.SomeConstant
s` getter中实例化。如果不是,则需要实例化它。然后返回常量的值。