Simple Injector pass hard coded values into constr

2019-04-21 12:12发布

问题:

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?

回答1:

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.