需要帮助配置Castle-Windsor

时间:2010-05-02 16:37:04

标签: castle-windsor

我在一个程序集(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。如何正确配置注册?

1 个答案:

答案 0 :(得分:3)

尝试更改Assembly2注册以使用所有接口:

AllTypes.FromAssemblyNamed("Assembly2").BasedOn(typeof(IReadDao<>))
  .WithService.Select((t, baseType) => t.GetInterfaces());