I am using simple injector for my web api project. I have a service which requires a session token in order for it to instantiate.
public class CustomerService
{
public CustomerService(Auth auth, IRepositoryFactory repositoryFactory)
{
// make post call to another web api for validation
SomeWebApiCallToValidateAuth.vaildate(auth);
}
}
So for this service, it requires an auth token and a repositoryFactory. I want it to be able to inject the auth parameter (which comes from the http web request) and at the same time to resolve the repository factory with the specified implemented thats registered to the container.
But I am not sure how to register this with simple injector or if there is a way around it. Any help would be great. Thanks.
Your current approach has several downsides:
Concerning the factory: Inject an
IRepository
rather than anIRepositoryFactory
. This might require you to hide the real repository behind a proxy, as explained here.Concerning the
Auth
value, it depends on the need, but if theAuth
value is an important part of theAPI
ofCustomerService
, this justifies addingAuth
as argument on the methods ofCustomerService
. If it is an implementation detail, inject anIAuthProvider
abstraction of some sort that allows you to retrieve the value at runtime (after the object graph is built). Again, this all is described in this article.