我有一个用户控件(在网站项目下)
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
?
答案 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";
}