C# 在C中按需创建对象#

C# 在C中按需创建对象#,c#,C#,我目前正在优化MVC应用程序,在控制器构造函数中创建了一些对象。像这样的 private readonly IUnitOfWork _unitOfWork; private readonly GenericRepository<User> _user; private readonly GenericRepository<UserDevice> _userDevice; public UsersController() { _unitOfWork = new Un

我目前正在优化MVC应用程序,在
控制器构造函数中创建了一些对象。像这样的

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);
}
private readonly IUnitOfWork\u unitOfWork;
专用只读一般存储用户;
专用只读一般存储用户设备;
公共用户控制器()
{
_unitOfWork=新unitOfWork();
_用户=新的通用存储库(_unitOfWork);
_userDevice=新的通用存储库(_unitOfWork);
}

这是一个简单的示例,但实际上在
控制器构造函数中创建了更多的对象,即使在
函数中只需要一个对象,但其他对象也在创建中。我想实现一种模式,在该模式中,对象只应在需要时在上创建。

有一件事我想使用
抽象工厂模式
,其中所有对象都应该创建,但我不知道如何实现。你们可以为这个问题提出任何其他的解决方案,使用模式只是我的想法。谢谢

编辑
随需应变意味着在
方法中使用对象
,就像我只需要
\u user
对象那么为什么会有
\u userDevice
创建?

似乎正是您想要的

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; } }
private readonly Lazy\u lazyUnitOfWork;
公共用户控制器()
{
_layzUnitOfWork=newlazy(()=>newunitofwork());
}
//在第一次使用时实例化工作单元
私有IUnitOfWork{get{return{lazyUnitOfWork.Value;}

“对象应仅在需要时在上创建”--在哪里?什么时候你的问题不清楚。“When needed”是一个模棱两可的短语,因为它可能意味着1。)在执行过程中的某个特定开销,或2。)在您的代码中,它不会在每个代码路径中被调用,但在代码中是静态定义的。如果您的类需要很多对象,但只是偶尔使用它们,则可能违反了规则。您可能希望重新审视您的设计,牢记这些原则。但是,为了真正回答您的问题,您是否考虑过仅在实际需要时使用来创建对象?创建这些对象的成本高吗?您是否因为分析了代码而进行优化?@RB。谢谢,在您的回复之后,我搜索了关于Lazy的内容,发现它很有用。谢谢您的回复。还有一件事,我正在考虑从控制器中删除所有初始化,创建一个抽象类,并使用Lazy在其中添加所有对象,并在该抽象类上创建具体类。好主意吗?@AliShahbaz:我看这没什么问题。