我目前正在优化MVC应用程序,在Controller Constructor
中创建了对象。像这样的东西
private readonly IUnitOfWork _unitOfWork;
private readonly GenericRepository<User> _user;
private readonly GenericRepository<UserDevice> _userDevice;
public UsersController()
{
_unitOfWork = new UnitOfWork();
_user = new GenericRepository<User>(_unitOfWork);
_userDevice = new GenericRepository<UserDevice>(_unitOfWork);
}
这是一个简单的例子,但实际上在Controller Constructor
中创建了更多的对象,即使在function
中只需要一个对象,但其他对象也在创建。我想实现一个模式,其中对象应该只在需要时创建。
在我看来,有一件事是使用Abstract Factory Pattern
所有对象应该创建但我不知道如何实现。你们可以为问题建议任何其他解决方案,使用模式只是我的想法。感谢
修改
按需表示在method
中使用对象,就像我只需要_user
个对象一样,为什么要创建_userDevice
?
答案 0 :(得分:4)
Lazy<T>
似乎正是您所寻找的。 p>
private readonly Lazy<IUnitOfWork> _lazyUnitOfWork;
public UsersController()
{
_layzUnitOfWork = new Lazy<IUnitOfWork>(() => new UnitOfWork());
}
// Instantiates the unit of work on first use
private IUnitOfWork _unitOfWork { get { return _lazyUnitOfWork.Value; } }