我在一个程序集(Assembly1)中有这些基本接口和提供程序:
public interface IEntity
{
}
public interface IDao
{
}
public interface IReadDao<T> : IDao
where T : IEntity
{
IEnumerable<T> GetAll();
}
public class NHibernate<T> : IReadDao<T>
where T : IEntity
{
public IEnumerable<T> GetAll()
{
return new List<T>();
}
}
我在另一个程序集(Assembly2)中有这个实现:
public class Product : IEntity
{
public string Code { get; set; }
}
public interface IProductDao : IReadDao<Product>
{
IEnumerable<Product> GetByCode(string code);
}
public class ProductDao : NHibernate<Product>, IProductDao
{
public IEnumerable<Product> GetByCode(string code)
{
return new List<Product>();
}
}
我希望能够从容器中获取IRead<Product>
和IProductDao
。
我正在使用此注册:
container.Register(
AllTypes.FromAssemblyNamed("Assembly2")
.BasedOn(typeof(IReadDao<>)).WithService.FromInterface(),
AllTypes.FromAssemblyNamed("Assembly1")
.BasedOn(typeof(IReadDao<>)).WithService.Base());
IReadDao<Product>
效果很好。容器给了我ProductDao
。但是,如果我尝试获取IProductDao
,则容器会抛出ComponentNotFoundException
。如何正确配置注册?
答案 0 :(得分:3)
尝试更改Assembly2注册以使用所有接口:
AllTypes.FromAssemblyNamed("Assembly2").BasedOn(typeof(IReadDao<>))
.WithService.Select((t, baseType) => t.GetInterfaces());