Skip to content

Instantly share code, notes, and snippets.

@stevetalkscode
Created October 18, 2020 16:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevetalkscode/50bc0a6013383cb293d69397daa1df06 to your computer and use it in GitHub Desktop.
Save stevetalkscode/50bc0a6013383cb293d69397daa1df06 to your computer and use it in GitHub Desktop.
public class StartUp
{
public void ConfigureServices(IServiceCollection services)
{
services.TryAddSingleton<GetSkuDelegate>(_ => () => Guid.NewGuid().ToString().Replace("-",string.Empty));
services.TryAddSingleton<UserAccessor>();
services.TryAddTransient(provider => provider.GetRequiredService<UserAccessor>().GetUser());
services.AddSingleton<GetCurrentUserDelegate>(provider => provider.GetRequiredService<IUser>);
services.TryAddSingleton<IDateTimeWrapper, DateTimeWrapper>();
services.AddSingleton<IProductFactory, ProductFactory>();
}
private delegate IUser GetCurrentUserDelegate();
private class ProductFactory : IProductFactory
{
private readonly GetSkuDelegate _skuFactory;
private readonly GetCurrentUserDelegate _getUser;
private readonly IDateTimeWrapper _dateTimeWrapper;
public ProductFactory(
GetSkuDelegate skuFactory,
GetCurrentUserDelegate getUser,
IDateTimeWrapper dateTimeWrapper)
{
_dateTimeWrapper = dateTimeWrapper;
_getUser = getUser;
_skuFactory = skuFactory;
}
public Product Create(string productName)
{
var createdDateTime = _dateTimeWrapper.GetCurrentDateTimeUtc();
var user = _getUser();
var newSku = _skuFactory();
return new Product(productName, newSku, user, createdDateTime);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment