asp.net-mvc-4 - Castle Windsor Register:无法创建组件“X.YService”,因为它需要满足依赖项
问题描述
这应该是一个普遍的问题,我已经搜索但找不到任何解决方案,如果它是一个骗子,请指出适当的链接。所以,我有一个通用存储库来支持几个实体,有一会儿我像下面这样注册它
控制器:这是我的控制器部分
public class XController : Controller
{
private ILegendsService _legendsService;
public LegendsController(ILegendsService legendsService)
{
_legendsService = legendsService;
}
}
服务:这是我的传奇服务科
public class LegendsService:ILegendsService
{
private readonly IRepositoryFactory<Legends, int> _legends;
private readonly IUnitOfWork _unitOfWork;
private readonly IDiObjectMapper _mapper;
public LegendsService(IRepositoryFactory<Legends, int>
legendsInfo
, IUnitOfWork unitOfWork
, IDiObjectMapper mapper)
{
_legends = legendsInfo;
_unitOfWork = unitOfWork;
_mapper = mapper;
}
}
RepositoryFactory:这是存储库工厂
public interface IRepositoryFactory<TEntity, in TKey> :
IRepository<TEntity, TKey> where TEntity : class
{
}
public class RepositoryFactory<TEntity, TKey> : Repository<TEntity,
TKey>, IRepositoryFactory<TEntity, TKey> where TEntity : class
{
public RepositoryFactory(IDatabaseFactory databaseFactory)
: base(databaseFactory)
{
}
}
UnitOfWork:这是我的 unitofWorkSection
public interface IUnitOfWork : IDisposable
{
void Commit();
Task CommitAsync();
}
public class UnitOfWork : IUnitOfWork
{
private readonly IDatabaseFactory _databaseFactory;
private bool _disposed = false;
private KYCContext _dataContext;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
this._databaseFactory = databaseFactory;
}
protected KYCContext DataContext => _dataContext ?? (_dataContext = _databaseFactory.Get());
}
DIObjectMapper:这是我的 DIObjectMapper
public interface IDiObjectMapper
{
TDestination Map<TSource, TDestination>(TSource source)
where TSource : class
where TDestination : class;
TDestination Map<TSource, TDestination>(TSource source, TDestination destination)
where TSource : class
where TDestination : class;
}
public class DiObjectMapper : IDiObjectMapper
{
public TDestination Map<TSource, TDestination>(TSource source)
where TSource : class
where TDestination : class
{
return AutoMapperSetup.Mapper.Map<TSource, TDestination>(source);
}
public TDestination Map<TSource, TDestination>(TSource source, TDestination destination)
where TSource : class
where TDestination : class
{
return AutoMapperSetup.Mapper.Map(source, destination);
}
}
温莎城堡:这是温莎城堡集装箱登记区
container.Register(Component.For<IDisposable>
().ImplementedBy<IDatabaseFactory>().LifestylePerWebRequest());
container.Register(Component.For<IRepository<Legends, int>>
().ImplementedBy<Repository<Legends, int>>
().LifestylePerWebRequest());
container.Register(Component.For<ILegendsService>
().ImplementedBy<LegendsService>().LifestylePerWebRequest());
container.Register(Component.For<IDatabaseFactory>
().ImplementedBy<DatabaseFactory>().LifestylePerWebRequest());
container.Register(Component.For<IUnitOfWork>
().ImplementedBy<UnitOfWork>().LifestylePerWebRequest());
container.Register(Component.For<IRepositoryFactory<Legends, int>>
().ImplementedBy<RepositoryFactory<Legends, int>>
().LifestylePerWebRequest());
container.Register(Component.For<IDiObjectMapper>
().ImplementedBy<DiObjectMapper>().LifestylePerWebRequest());
container.Register(Component.For<IDisposable>
().ImplementedBy<Disposable>().LifestylePerWebRequest());
container.Register(Component.For<IRepository<Legends, int>>
().ImplementedBy<IRepositoryFactory<Legends, int>>
().LifestylePerWebRequest());
注意:我没有提到 Repository 和 IRepository 它们实际上只包含相同的通用 CRUD 操作
解决方案
这解决了我的问题:
container.Register(Component
.For(typeof(IRepositoryFactory<,>))
.ImplementedBy(typeof(RepositoryFactory<,>))
.LifestylePerWebRequest());
container.Register(Component
.For(typeof(IRepository<,>))
.ImplementedBy(typeof(Repository<,>))
.LifestylePerWebRequest());
推荐阅读
- assembly - 使用打印宏时 TASM 写入标准输出与写入文件行为差异
- c++ - 使用功能测试宏和 Clang 时如何避免有关 c++Future-extensions 的警告?
- c# - 将 EasyNetQ 3.4.5 升级到最新的 6.3.1 后出现“意外异常”
- javascript - 开发时触发 React Suspense State
- javascript - 如何更改具有多个键值的自定义数据属性?
- sql - 需要编写oracle sql查询来提取2个日期解析字符串
- sql - 如何将日期分成 24 小时组 -BigQuery
- webgl - 布局(位置= n)可以跳过WebGL中drawBuffers的索引吗?
- amazon-web-services - 当我将 AWS 记录路由到 IP 时出现“无效的主机标头”警告
- git - 如何将自定义对象数据库添加到 libgit2?