Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple Injector pass hard coded values into constructor

In Simple Injector I can do the following:

container.RegisterSingle<IAuctionContext>(() => new AuctionContext(
    new Uri("http://localhost:60001/AuctionDataService.svc/")));

What I am doing here is saying that when IAuctionContext is found, replace it with this new AuctionContext. The problem is that with the call to RegisterSingle, only a single instance of AuctionContext will be used. What I'd like it to be able to pass in a Uri parameter as above but not have the single instance but allow a new instance each time.

How is this possible?

like image 927
Sachin Kainth Avatar asked Dec 06 '12 15:12

Sachin Kainth


1 Answers

The value you are trying to inject is a simple hard-coded value. For constant values like hard-coded values and configuration values, just use the Register method:

var uri = new Uri("http://localhost:60001/AuctionDataService.svc/");

container.Register<IAuctionContext>(() => new AuctionContext(uri));

The Register method ensures a new instance is returned each time.

When it comes to injecting values that could change during the course of the application, please read this article about injecting runtime data.

like image 129
Steven Avatar answered Oct 07 '22 12:10

Steven