【问题标题】:How to access internal method from Business layer如何从业务层访问内部方法
【发布时间】:2015-07-09 19:45:48
【问题描述】:

我想访问内部方法如何访问请求帮助 业务层类

internal DataTable SaveCustomerDetail() {
    SqlParameter[] parameters = new SqlParameter[7];
    parameters[0] = DataAccesLayer.Addparameters("@CustomerName", CustomerName, SqlDbType.VarChar, 100);
    parameters[1] = DataAccesLayer.Addparameters("@CustomerEmailID", CustomerEmailIDl, SqlDbType.VarChar, 100);
    parameters[2] = DataAccesLayer.Addparameters("@CustomerPhoneNumber",CustomerPhoneNumber, SqlDbType.VarChar, 100);
    parameters[3] = DataAccesLayer.Addparameters("@CustomerAddress", CustomerAddress, SqlDbType.VarChar, 100);
    parameters[4] = DataAccesLayer.Addparameters("@TotalProducts", totalproducats, SqlDbType.Int, 100);
    parameters[5] = DataAccesLayer.Addparameters("@TotalPrice", totalprice, SqlDbType.Int, 100);
    parameters[6] = DataAccesLayer.Addparameters("@PaymentMethod", PaymentMethod, SqlDbType.VarChar, 100);
    DataTable dt = DataAccesLayer.ExecuteDTBbyprocedure("SP_SAVECUSTOMERDETAIL",parameters);
    return dt;
}

我想访问内部 Method 方法的这个 .cs:

protected void btnplaceorder_Click(object sender, EventArgs e)
{
    string productsid = string.Empty;
    DataTable dt;
    if (Session["Mycart"] != null) {
        dt = (DataTable)Session["Mycart"];
        BussinessLayer B = new BussinessLayer()
        {
            CustomerName = txtcustomername.Text,
            CustomerEmailIDl = txtcustomeremailid.Text,
            CustomerAddress = txtcustomeraddress.Text,
            CustomerPhoneNumber = txtphoneno.Text,
            totalproducats = Convert.ToInt32(txttotalproducts.Text),
            totalprice = Convert.ToInt32(txttotalprice.Text),
            PaymentMethod = rblpaymentmode.SelectedItem.Text
        };
        DataTable dtResult = B.SaveCustomerDetail();
    }
}

【问题讨论】:

  • 那有什么问题?
  • 错误 1 ​​'BussinessLayer' 不包含 'SaveCustomerDetail' 的定义,并且找不到接受类型为 'BussinessLayer' 的第一个参数的扩展方法 'SaveCustomerDetail'(您是否缺少 using 指令或程序集参考?)它显示上述错误
  • 他们在同一个namespace吗?
  • 是的,它们在同一个命名空间中

标签: asp.net


【解决方案1】:

制作方法public,像public DataTable SaveCustomerDetail,这是最简单的方法。

如果您的应用程序是基于 View - ViewModel - Model 模式设计的,那么您尝试访问的业务层似乎位于与表示层不同的程序集中。这意味着它们位于不同的dll(项目)中。

所以你要做的是从另一个dll 访问internal DataTable SaveCustomerDetail,这是不行的。您只能从另一个 dll 访问 public 方法。

您可以这样想:您的事件btnplaceorder_Click 是表示层中控件的一部分,而您的internal 方法DataTable SaveCustomerDetail 是业务层的一部分。 btnplaceorder_Clickjust 不知道你的代码中有一个名为DataTable SaveCustomerDetail 的方法,因为你做了它internal。因此,为了让所有想要调用它的人都能看到它,无论您的代码在哪里,只需将其设为 public

您可以在此处阅读有关internal - protected - public 之间差异的更多信息:internal vs public in c#

也许它会帮助您了解 View Model 设计模式:https://stackoverflow.com/search?q=view+model+pattern

【讨论】:

猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2012-07-06
  • 2021-01-04
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多