Это мой код:
public interface IUnitOfWork : IDisposable
{
IRepository<TEntity> GetRepository<TEntity>() where TEntity : class;
void Save();
}
public class UnitOfWork<TContext> : IUnitOfWork where TContext : IDbContext, new()
{
private readonly IDbContext _ctx;
private readonly Dictionary<Type, object> _repositories;
private bool _disposed;
...................
EmployeeService.cs
public class EmployeeService : EntityService<Employee>, IEmployeeService
{
readonly IUnitOfWork _unitOfWork;
readonly IRepository<Employee> _repository;
........
в консольном приложении, когда я звоню:
var employeeService = Injector.Instance.Resolve<IEmployeeService>();
Я получаю ошибку нижесообщение:
Необработанное исключение типа 'Castle.MicroKernel.Handlers.GenericHandlerTypeMismatchException' произошло в Castle.Windsor.dll Дополнительная информация: Типы EfContext.DAL.IDbContext не удовлетворяют общим ограничениям типа реализации EfContext.DAL.UnitOfWork 1 of component 'EfContext.DAL.UnitOfWork
1 '. Вероятно, это ошибка в используемой IGenericImplementationMatchingStrategy (EfContext.DependencyInjection.UseStringGenericStrategy)
public class ConsoleAppInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
container.Register(Component.For(typeof(IUnitOfWork)).ImplementedBy(typeof(UnitOfWork<>), new UseStringGenericStrategy()).LifestyleTransient());
}
}
public class UseStringGenericStrategy : IGenericImplementationMatchingStrategy
{
public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
{
if (context.RequestedType == typeof(IUnitOfWork))
{
var res = new[] { typeof(object) };
return res;
}
return null;
}
}