从dll访问用户控件类型?

时间:2013-08-03 11:49:44

标签: c# asp.net user-controls

我有一个用户控件(在网站项目下)

UcArticle.ascx

<%@ Control Language="C#" 
            AutoEventWireup="true"
            CodeFile="UcArticle.ascx.cs" 
            Inherits="Uc_UcArticle" 
            ViewStateMode="Disabled" %>
...

代码背后是:

UcArticle.ascx.cs

public partial class Uc_UcArticle : System.Web.UI.UserControl
{
   ...
}

但是,我有一个 DLL 项目和一个应该使用类型UcArticle的方法:

  public void AddMethod(UcArticle uc ) //error here
        {
         //do something with uc...

        }

但是dll不知道UcArticle(无法解析符号)

P.S。我可以使用dynamic来访问uc的属性,但我不想这样做。

如何让dll知道类型UcArticle

2 个答案:

答案 0 :(得分:2)

如果您的项目包含UC且项目依赖于需要UC的程序集,那么您将拥有循环依赖项。

解决这个问题的最好方法是将UC放入另一个单独的程序集中。

但是,您的业务逻辑的任何部分都需要了解一部分UI,这仍然是一种气味。因此,请重新考虑引导您的设计。有些东西烂了。

答案 1 :(得分:1)

嗯,我认为这是一个糟糕的设计。

在AddMethod函数中,您真的需要自定义用户控件类型吗? 为什么不声明一个接口,让你的自定义用户控件实现接口, 还可以更改AddMethod函数以将接口类型作为参数。只是暴露你想要的任何操作。

你觉得怎么样?

更新(我只是直接在这里输入,所以,对不起格式):

//well then you can declare the interface as:
public interface ITextControl{
 string TextValue{get;set}
}
//and in your code:
public partical class whateveryourcontrolname:UserControl,ITextControl
{
/..../
public string TextValue{
 get{
  return this.Text;
 }
set{
 this.Text=value;
 }
}
}
//and your method:
void AddMethod(ITextControl txtCtrl){
 txtCtrl.TextValue="Yes";
}