Plain and simple, what is the use case of the Orchard.Environment.Work<>
class defined in Orchard\\Environment\\WorkContextModule.cs
?
The Work
class is for lazy loading dependency injection. The dependency is not resolved when instantiating the class, but only when calling the Value
property:
private readonly IMyService _myService;
private readonly IMyOtherService _myOtherService;
public MyClass(Work<IMyService> myService, IMyOtherService myOtherService) {
// Just assign the Work class to the backing property
// The dependency won't be resolved until '_myService.Value' is called
_myService = myService;
// The IMyOtherService is resolved and assigned to the _myOtherService property
_myOtherService = myOtherService;
}
Now only when _myService.Value
is called, the IMyService gets resolved by the Dependency resolver, which gives you the working of a lazy loading dependency injection.