У меня есть эти базовые интерфейсы и провайдеры в одной сборке (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
. Как правильно настроить регистрацию?