我正在尝试将我的参考数据服务层更改为静态实现,并应用单例模式。原因是,我认为参考服务可以是静态的,以提高性能(所有人共享相同的'实例' - 我认为?)
我有一个分层应用。 UI->服务 - >逻辑 - >数据
但是,我使用IoC,并认为这里存在冲突。我使用Unity作为我的IoC容器。我通过添加一个静态实例和一个处理实例的公共实例来开始转换。
但是,我不知道如何处理我的构造函数。我(Unity)目前将我的Reference数据逻辑类注入构造函数...
public class ReferenceDataService : IReferenceDataService
{
private static ReferenceDataService instance;
IReferenceDataLogic _refDataLogic;
ObjectCache cache = MemoryCache.Default;
public ReferenceDataService(IReferenceDataLogic logic)
{
_refDataLogic = logic;
}
public static ReferenceDataService Instance {
get
{
if(instance != null) return instance;
lock(new object())
{
instance = new ReferenceDataService();
}
result instance;
}
}
}
但是我想我需要删除这个构造函数,所以在我的UI代码中,我可以得到数据,但是说:
var MyReferenceDataList = ReferenceDataService.Instance.GetMyReferenceDataList(type);
我是否还需要使逻辑和数据访问层类也是静态的?这意味着我永远无法对此进行单元测试。
答案 0 :(得分:1)
您应该能够告诉您的容器返回一个实例。我对Unity不熟悉,但是对于Castle Windsor,你只需将生活方式设置为单身
container.Register(Classes.FromThisAssembly()
.BasedOn(typeof(IProvideWellKnownData))
.WithServiceAllInterfaces()
.LifestyleSingleton());