我有一个非常奇怪的情况。我有一个UOW存储库模式。我有一个包含我的实体的域层,一个数据访问层,其中包含dbcontext(UnitofWork)和不同实体的存储库。我有一个应用程序层,其中提供了一些我需要读写数据的服务。架构基本上包含一些DTO,以帮助保持数据的一致性。我有一个带有MVC5的UI层,在其中我已通过Unity注入了所有依赖关系,并且如果我从控制器构造器实例化每个服务,它将非常有用。
我有一些服务,例如GlobalAppSvc(从IGlobalAppSvc实现),SystemSettingAppSvc(ISystemSettingAppSvc)等。为了简化生活,我创建了一个名为ApplicationManager的类,如下所示。
public class ApplicationManager
{
public ApplicationManager(ISystemSettingAppSvc systemSettingAppSvc, IBalanceAppSvc balanceAppSvc, IGlobalAppSvc globalAppSvc, IProfileAppSvc profileAppSvc)
{
SystemSettingAppSvc = systemSettingAppSvc;
BalanceAppSvc = balanceAppSvc;
GlobalAppSvc = globalAppSvc;
ProfileAppSvc = profileAppSvc;
}
public ISystemSettingAppSvc SystemSettingAppSvc { get; set; }
public IBalanceAppSvc BalanceAppSvc { get; set; }
public IGlobalAppSvc GlobalAppSvc { get; set; }
public IProfileAppSvc ProfileAppSvc { get; set; }
}
在我的Unity中,我已经注册了所有服务和存储库以及工作单元
container.RegisterType<IUnitOfWork, WUnitOfWork>(new PerResolveLifetimeManager(), new InjectionConstructor());
container.RegisterType<IWUnitOfWork, WUnitOfWork>(new PerResolveLifetimeManager(), new InjectionConstructor());
我通过扩展BaseController
创建了一个Controller
,因此我不必在我编写的每个控制器中都解析应用程序管理器。在基本控制器中,我将此ApplicationManager
解析为
public class BaseController : Controller
{
// GET: Base
public ApplicationManager ApplicationManager
{
get;
private set;
}
public BaseController()
{
ApplicationManager = UnityConfig.Container
.Resolve<ApplicationManager>();
}
}
然后我可以进入任何控制器并使用此BaseController
扩展控制器,然后我就可以访问ApplicationManager.GlobalAppSvc.Methods()...
我的问题是,每当进行数据修改(例如,可以说有这样的操作)时,都会执行一个操作来扣除余额并为特定用户保存更改。当我再次请求用户的余额时,它仍然显示未更改的余额,但是扣除了数据库中的余额,但是该服务未获取更新的数据。我究竟做错了什么?
答案 0 :(得分:0)
解决方案似乎是要确保需要这样向Unity注册BalanceAppSvc:
ApplicationManager=UnityConfig.Container.Resolve<ApplicationManager>(); and registering types as container.RegisterType<IBalanceAppSvc, BalanceAppSvc>(new PerResolveLifetimeManager());