So,
// this doesn't work or make sense
services.AddScoped<IReadSomething>(sp => new Something());
services.AddScoped<IWriteSomething>(sp => new Something());
So I have two Interfaces for the same Class, IReadSomething
and IWriteSomething
, the Class is just Something
.
They need to be scoped because they transfer a subset of data from HttpContext
to a arbitrary framework independent 'DTO'.
They both should be referencing the same Instance of Something
, obviously one just exposes some read and the other, some write operations. So it gets written somewhere in the Middleware pipeline - and the rest of the app can just use the IReadSomething
and read data so we can mitigate accidental data overwrite.
Doing,
services.AddScoped<IReadSomething, Something>();
services.AddScoped<IWriteSomething, Something>();
Doesn't make sense either because, quite rightly, it should create a new instance for each interface.
What am I missing to get Interface Segregation and Scoped Dependency Resolution to work together - I feel like I have to worry about the ASP.NET Core Scoped Service Factory or something?
I'm also using structuremap for my main dependency resolution - so an answer using that is fine.
Make the target class scoped and then associate it with the desired interfaces
services.AddScoped<Something>();
services.AddScoped<IReadSomething>(sp => sp.GetService<Something>());
services.AddScoped<IWriteSomething>(sp => sp.GetService<Something>());
That way a call for either interface will return the same instance in scope
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With