0

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

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(无法解析符号)

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

如何让 dll 知道类型UcArticle

4

2 回答 2

2

当您有一个包含 UC 的项目并且该项目依赖于需要 UC 的程序集时,您就有了循环依赖关系。

打破这种情况的最佳方法是将 UC 放入另一个单独的组件中。

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

于 2013-08-03T11:53:39.643 回答
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";
}
于 2013-08-03T12:27:23.177 回答