Je veux injecter Modules
et Data
propriétés d'un fichier autofac.json
dans mon ApiController
avec le nom DataController
Autofac injectent des propriétés sur ApiController en combinaison avec RegisterApiControllers
Je lis cette page: http://docs.autofac.org/en/latest/configuration/xml.html mais mes propriétés continuent à être NULL
, je doit faire quelque chose de mal. Qui peut m'aider?
Mon Controller
a déjà un constructeur dans lequel une instance de ILog
est injectée, donc ces propriétés sont en sus.
Voici la configuration Autofac
J'ai maintenant:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(typeof(Startup).Assembly); // to register all ApiControllers at once
// Use the Microsoft Configuration Extensions together with Autofac to create an Autofac Module
var autofacConfig = new ConfigurationBuilder();
autofacConfig.AddJsonFile("autofac.json");
var autofacModule = new ConfigurationModule(autofacConfig.Build());
builder.RegisterModule(autofacModule);
var container = builder.Build();
var httpConfigurationConfig = new HttpConfiguration { DependencyResolver = new AutofacWebApiDependencyResolver(container) };
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(httpConfigurationConfig);
app.UseWebApi(httpConfigurationConfig);
Ceci est mon autofac.json
:
{
"components": [
{
"type": "Web.Controllers.DataController, Web",
"injectProperties": true,
"properties": {
"Modules": {
"Module1": "http://localhost:12345/",
"Module2": "http://localhost:12346/"
},
"Data": {
"Item1": "Declarations",
"Item2": "Payments"
}
}
}
]
}
Mon Controller
ressemble à ceci:
namespace Web.Controllers
{
public class DataController : ApiController
{
private readonly ILog _log;
public Dictionary<string, string> Modules { get; set; } // << I want these to be injected!
public Dictionary<string, string> Data { get; set; } // <<
public DataController(ILog log) // gets injected
{
_log = log;
}
}
}
Les 'Modules' et 'Data' ne devraient-ils pas être des propriétés et non des champs? – Jeroen
Pendant un moment, je me sentais stupide :-) mais malheureusement, même avec des propriétés, le problème persiste. – 321X
La modification de 'Dictionary' en' IDictionary' fait-elle une différence? – tdragon