Le type "* * * " n'est pas cessible à un service '***' dans Autofac
Je suis en train de faire une requête dynamique dans mon projet en utilisant le Système.Linq.Dynamique. J'utilise Autofac en tant que par défaut de mon conteneur IOC. Mais Maintenant j'ai un problème sur l'enregistrement des composants génériques, voici mon code :
l'interface:
public interface IDynamicQuery
{
IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class;
}
la classe:
public class DynamicQuery :IDynamicQuery
{
public DynamicQuery(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
private readonly IUnitOfWork unitOfWork;
public IQueryable<T> CreateDynamicQuery<T>(string propertyName, string propertyValue, Expression<Func<T, bool>> where) where T:class
{
var appRepository = unitOfWork.Repository<T>();
IQueryable<T> queryResult = null;
if (propertyName.Contains('$'))
propertyName = propertyName.Replace('$', '.');
queryResult = appRepository.GetMany(where).Where("" + propertyName + ".Contains(\"" + propertyValue + "\")");
return queryResult;
}
}
Puis-je les inscrire dans le démarrage de l'application d'entrée:
builder.RegisterType<IDynamicQuery>().As<DynamicQuery>().InstancePerHttpRequest();
Mais Lorsque je démarre mon projet basé sur MVC 4, il me lance une exception comme :
The type 'TinyFrame.Framework.Query.IDynamicQuery' is not assignable to service 'TinyFrame.Framework.Query.DynamicQuery'.
l'Exception jette à : var container = builder.Build();
Je sais comment enregistrer une classe générique en autofac, mais je ne sais pas comment faire pour s'inscrire au-dessus de la classe que j'ai soulevés, quelqu'un peut m'aider sur ce point? Je suis un nouveau venu sur autofac, thx dans les conseils.
IDynamicQuery
n'est pas un DynamicQuery
mais un DynamicQuery
EST un IDynamicQuery
.Oh mon dieu, comment négligent de moi...... J'ai eu un mauvais sommeil la nuit dernière. merci pour les conseils.
OriginalL'auteur CharlieShi | 2014-04-28
Vous devez vous connecter pour publier un commentaire.
@CharlieShi j'ai eu le même problème et j'ai remarqué que je commençais à oublier d'ajouter l'héritage de ma classe. Mais dans votre cas, essayez ceci:
inverse de l'interface avec la classe!
hahaha, il se mec!
OriginalL'auteur Alisom Martins
Dans mon cas, j'avais inversé l'ordre dans lequel l'interface et les classes sont les suivantes: -
OriginalL'auteur Sheena Agrawal
Vous pouvez enregistrer le de l'assemblage complet avec autofac récipient comme de cette façon:
Dans votre cas, si vous souhaitez enregistrer le particulier de type seulement, alors il suffit d'utiliser la suivante:
Vous pouvez définir la durée de vie en fonction des besoins de votre entreprise.
OriginalL'auteur error_handler
Votre problème est que vous essayez de la carte d'interface sur la mise en œuvre, il suffit de l'échanger IDynamicQuery et DynamicQuery. Et n'oubliez pas de faire une reconstruction.
Il devrait ressembler à:
OriginalL'auteur Denis Kotenko
Rencontré le même problème, mais la cause était différent dans mon cas. Je ne savais pas que j'étais l'enregistrement du même type à deux reprises. Je trouve ce message d'erreur est trompeur.
OriginalL'auteur j.e.
Cela peut être fait si vous oubliez d'ajouter l'Interface de votre classe.
Ce sera la cause de l'erreur
Cela permettra de résoudre ce
OriginalL'auteur MyDaftQuestions