C#代理和var关键字

C#代理和var关键字,c#,castle-windsor,proxy-classes,C#,Castle Windsor,Proxy Classes,这个问题与我以前的一个职位有关。基本上,我想将DAO注入一个实体,即 public class User { IUserDAO userDAO; public User() { userDAO = IoCContainer.Resolve<IUserDAO>; } public User(IUserDAO userDAO) { this.userDAO = userDAO; } //Wrapped DA

这个问题与我以前的一个职位有关。基本上,我想将DAO注入一个实体,即

public class User
{
   IUserDAO userDAO;
   public User()
   {
         userDAO = IoCContainer.Resolve<IUserDAO>;
   }
  public User(IUserDAO userDAO)
   {
         this.userDAO = userDAO;
   }
   //Wrapped DAO methods i.e
   public User Save()
   {
       return userDAO.Save(this);
   }

}
这意味着我可以将用户实体保持为一个非常愚蠢的类,适合通过网络进行数据传输,但也可以神奇地为它提供一组DAO方法

这是非常超出我的舒适区,虽然,我想知道我需要什么来完成这一点?我可以使用Castles动态代理吗?C#编译器是否能够处理这一问题并了解动态添加的方法

如果这是胡说八道,请随时告诉我

编辑:

我们需要做的是以某种方式将DAOProxyService.Create()声明为在编译时返回一个用户对象。这可以通过泛型实现

这并不完全正确,我想要返回的不是一个用户对象,而是一个具有动态添加的UserDAO方法的用户对象。由于这个类没有定义在任何地方,编译器将不知道如何使用它

我本质上返回的是一个新对象,看起来像:User:IUserDAO,所以我想我可以根据需要进行强制转换。但这看起来很混乱


看起来我要找的与此类似:

我最初想说的是,你问的东西行不通。但经过一些调整,我们也许能够让它工作

var只是一个编译器特性。当你说

 var x = GetSomeValue();
编译器说“'GetSomeValue'定义为返回一个字符串,因此程序员必须编写'string x=GetSomeValue();'”。注意编译器是这样说的;此更改在编译时完成

您需要定义一个类(DAOProxyService),该类本质上返回一个对象。这将起作用,但“var User”将与“Object User”相同

我们需要做的是以某种方式将DAOProxyService.Create()声明为在编译时返回一个用户对象。这可以通过泛型实现:

class DAOProxyService
{
     static DAOProxyService<T> Create<T>(T obj) { ......} 
}
类DAOProxyService { 静态DAOProxyService Create(T obj){……} } > p>它不是完全自动的,但是您可以考虑使用Oleg Sych方法的变体来生成装饰器类。每当IUserDAO发生更改(新方法等)时,只需重新生成文件。比手动维护更好:-)


我们将讨论一下代理生成,但我会回到这里。反正看起来很有趣。
class DAOProxyService
{
     static DAOProxyService<T> Create<T>(T obj) { ......} 
}