在C#中按需创建对象

时间:2017-03-09 14:59:15

标签: c#

我目前正在优化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

1 个答案:

答案 0 :(得分:4)

Lazy<T>似乎正是您所寻找的。

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; } }