【问题标题】:Resolving Generics with Castle Windsor使用 Castle Windsor 解决泛型问题
【发布时间】:2012-02-06 10:34:39
【问题描述】:

我在使用 Windsor Castle 2.5 解决通用接口/类时遇到问题。我有以下类和接口:

public interface IGenericDao<T> : IDao
public abstract class GenericDao<T> : IGenericDao<T> where T:class, new()
public class LocationDao : GenericDao<Location>, ILocationDao

对于注册,我使用以下代码行

c.Register(
           Component.For(typeof(IGenericDao<>))
               .ImplementedBy(typeof(GenericDao<>)));

c.Register(Component.For<ILocationDao>().ImplementedBy<LocationDao>());

现在,当我尝试解决 ILocationDao

var i = c.Resolve<ILocationDao>();

返回值为Castle.Proxies.ILocationDaoProxy,我无法将其转换为LocationDao

当我从类 `LocationDao' 中删除 GenericDao&lt;Location&gt;

public class LocationDao : ILocationDao

一切正常。所以我想我在注册时做错了。

你能帮帮我吗?

【问题讨论】:

  • @weston 这是GenericDao.cs 的实现,这是LocationDao.cs 的实现。
  • @weston,如果LocationDao 不能实现所有abstract 方法,它将无法编译。
  • @svick 是的,对不起,你是对的,忽略我的评论 Christian

标签: c# .net castle-windsor


【解决方案1】:

如果您告诉容器您需要ILocationDao,则不应将结果转换为LocationDao,只需将其用作ILocationDao

如果您确定使用该界面还不够,请将LocationDao 注册为LocationDao 并解决该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多