Dans ma quête pour savoir l'unité, je veux enregistrer un type qui, comme un « type enregistré » comme paramètre du constructeur.Comment injecter un paramètre « enregistrer tapé » dans un constructeur
Dans mon fichier Bootstrapper.cs J'ai cette configuration:
container.RegisterType<IRepository<User>, UserRepository>();
container.RegisterType<BaseService<User>, UserService>(); // <-- Should I inject the parameter here ?
container.RegisterType<IFactory<BaseService<User>>, Factory<UserService>>(); // <-- or here
Maintenant, c'est la mise en œuvre de la classe BaseService:
public abstract class BaseService<TModel>
{
private readonly IRepository<TModel> _repository;
// Injected parameter in constructor
public BaseService(IRepository<TModel> repository)
{
_repository = repository;
}
}
Ma question est de savoir comment injecter dans le constructeur BaseService la paramètre résolu par cette ligne: container.RegisterType, UserRepository>(); ?
J'ai vérifié que j'utiliser le InjectedParameter, mais je ne sais pas comment utiliser correctement dans ce cas.
Merci,
EDIT
ici est l'autre mise en œuvre:
UserService:
public class UserService : BaseService<User>
{
public UserService(IRepository<User> repository) : base(repository)
{
}
}
usine:
public class Factory<T> : IFactory<T> where T : new()
{
public T Create()
{
return new T();
}
}
Si vous voulez d'abord vous enregistrer 'IRepository', d'autre part à résoudre et puis enregistrez 'BaseService ' que dependend à 'IRepository ' de l'étape 2, alors 'InjectionConstructor' vous aidera. Si vous voulez enregistrer uniquement '' IRepository et résoudre '' BaseService ailleurs (pas de fichier de configuration (Bootstrapper.cs)) vous devez utiliser 'DependencyOverride' pour elle. Il sera plus utile si vous donner un exemple où et comment vous voulez résoudre 'BaseService ' –