Registre de Type Générique avec Autofac
J'ai UnitofWork de la classe et de mettre en œuvre les IUnitOfWork. J'essaie de registre avec autofac :
var builder = new ContainerBuilder();
builder
.RegisterGeneric(typeof(UnitOfWork<Repository<>,>))
.As(typeof(IUnitOfWork))
.InstancePerDependency();
Mise en œuvre est:
public class UnitOfWork<T, O> : IUnitOfWork
where T : Repository<O>
where O : BaseEntity
{
}
public interface IUnitOfWork : IDisposable
{
void SaveChanges();
}
Donne une erreur de Type"attendu"
mais ce un travail sur un autre projet:
public class Repository<T> : GenericRepository<T>
where T : BaseEntity
{
public Repository(IDbContext context)
: base(context) { }
}
public abstract class GenericRepository<T>
: IRepository<T>, IQueryable<T> where T : BaseEntity
{
}
builder
.RegisterGeneric(typeof(Repository<>))
.As(typeof(IRepository<>))
.InstancePerHttpRequest();
- "Donne une erreur de Type "attendu". Vous devez être plus explicite. Tu veux dire que le compilateur C# donner à cette erreur, non?
- Désolé, le projet n'a pas à compiler et donne une erreur de Type "Prévu" pour UnitOfWork<T, O>
Vous devez vous connecter pour publier un commentaire.
Vous ne peut pas avoir partiellement ouverts catégories (par exemple, avec
UnitOfWork<Repository<>,>
vous avez spécifiéT
mais pasO
) à l'intérieur d'untypeof
, essayer avec:La
where T : Repository<O>
générique contrainte de prendre soin de ce que le premier argument doit être unRepository<>
Mais il ne fonctionne pas avec
RegisterGeneric
car il nécessite une interface générique donc besoin de créer unIUnitOfWork<T,O>
...Mais ton modèle est très étrange. Pourquoi est-ce que votre
UnitOfWork
besoin d'unRepository<>
type d'argument?Au lieu d'avoir comme un argument de type, vous pouvez obtenir un
Repository<>
dans votreUnitOfWork<E>
constructeur:Où
IUnitOfWork<E>
Et l'Autofac inscription:
Repository<>
ou vous voulez avoir personnalisé dérivés dépôts? Si oui que vous aurez besoin de ma première suggestion avec leIUnitOfWork<T,O>
où vous spécifiez le référentiel et aussi l'entité...