小编her*_*iod的帖子

.Net动态加载DLL

我试图编写一些代码,允许我动态地将DLL加载到我的应用程序中,具体取决于应用程序设置.我们的想法是在应用程序设置中设置要访问的数据库,然后加载相应的DLL并将其分配给我的应用程序访问的接口实例.

这是我目前的代码:

        Dim SQLDataSource As ICRDataLayer
    Dim ass As Assembly = Assembly. _
    LoadFrom("M:\MyProgs\WebService\DynamicAssemblyLoading\SQLServer\bin\Debug\SQLServer.dll")

    Dim obj As Object = ass.CreateInstance(GetType(ICRDataLayer).ToString, True)
    SQLDataSource = DirectCast(obj, ICRDataLayer)

    MsgBox(SQLDataSource.ModuleName & vbNewLine & SQLDataSource.ModuleDescription)
Run Code Online (Sandbox Code Playgroud)

我有我的接口(ICRDataLayer),SQLServer.dll包含此接口的实现.我只想加载程序集并将其分配给SQLDataSource对象.

上面的代码不起作用.抛出没有异常,甚至没有出现Msgbox.我希望至少消息框中没有任何内容,但即使这样也不会发生!

有没有办法确定加载的程序集是否实现了特定的接口.我尝试了以下,但这似乎也没有做任何事情!

        For Each loadedType As Type In ass.GetTypes
        If GetType(ICRDataLayer).IsAssignableFrom(loadedType) Then
            Dim obj1 As Object = ass.CreateInstance(GetType(ICRDataLayer).ToString, True)
            SQLDataSource = DirectCast(obj1, ICRDataLayer)
        End If
    Next
Run Code Online (Sandbox Code Playgroud)

编辑:Vlad的例子中的新代码:

    Module CRDataLayerFactory
    Sub New()
    End Sub
    ' class name is a contract,
    ' should be the same for all plugins
    Private Function …
Run Code Online (Sandbox Code Playgroud)

vb.net reflection dll assemblies

8
推荐指数
1
解决办法
2万
查看次数

C#使用LINQ和Nullable布尔值

我有下面的linq查询,它接受一个文本字段,可能是Y,N或DBnull并填充一个布尔值?参数,无论是True,False还是null,具体取决于字段的值.

var dset = from i in tbdc.Talkbacks
       where i.talkback_id == id
       select new Talkback(
               i.talkback_id, i.acad_period, i.reference,
               i.staff_member, i.date_received, i.no_talkers,
               i.gender_id, i.names, i.type_id,
               i.method_id, i.area_id, i.site_id,
               i.category_id, i.date_closed, i.expenddate,
               i.acknowledgementtarget,
               (i.targetmet == "Y") ? true : 
                   ((i.targetmet == "N") ? false : null),
                   (i.acknowledgementtargetmet != "N") ? true : false
Run Code Online (Sandbox Code Playgroud)

有问题的路线是

(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? false : null)
Run Code Online (Sandbox Code Playgroud)

在阅读之后,我发现了一些文档,其中声明内联的第二个和第三个参数需要是相同类型的,或者可以隐式地相互转换.

我的问题是,如何绕过这个限制来实现我想要的结果?

我对C#比较新,所以我还不熟悉它的所有怪癖/功能.

c# nullable ternary-operator implicit-conversion

7
推荐指数
1
解决办法
7734
查看次数

ASP.Net MVC2 DropDownListFor

我试图在一个项目中学习MVC2,C#和Linq到实体(是的,我很生气),我遇到了一些DropDownListFor问题,并将SelectList传递给它.

这是我的控制器中的代码:

public ActionResult Create()
{
    var Methods = te.Methods.Select(a => a);

    List<SelectListItem> MethodList = new List<SelectListItem>();

    foreach (Method me in Methods)
    { 
        SelectListItem sli=new SelectListItem();
        sli.Text = me.Description;
        sli.Value = me.method_id.ToString();
        MethodList.Add(sli);
    }

    ViewData["MethodList"] = MethodList.AsEnumerable();

    Talkback tb = new Talkback();
    return View(tb);
} 
Run Code Online (Sandbox Code Playgroud)

和我有麻烦试图让DropDownListForMethodListViewData.当我尝试:

<%:Html.DropDownListFor(model => model.method_id,new SelectList("MethodList","method_id","Description",Model.method_id)) %>
Run Code Online (Sandbox Code Playgroud)

它出错以及以下消息

DataBinding: 'System.Char' does not contain a property with the name 'method_id'.
Run Code Online (Sandbox Code Playgroud)

我知道为什么会这样,因为它是MethodList一个字符串,但我无法弄清楚如何让它采取SelectList.如果我按照正常情况执行以下操作DropDownList:

<%: Html.DropDownList("MethodList") %>
Run Code Online (Sandbox Code Playgroud)

对此非常满意. …

c# asp.net-mvc-2

6
推荐指数
1
解决办法
2万
查看次数

MEF'导出不能分配给'错误'

我刚开始使用MEF并且遇到了早期问题.

我有一个名为DataService的接口:

namespace DataAccess
{
  interface IDataService
  {
    string Name { get; }
    string Description { get;}

    List<String> GetPeople();
  }
}
Run Code Online (Sandbox Code Playgroud)

此接口有2个实现,一个用于SQL Server,另一个用于Oracle.下面是Oracle实现,SQL Server实现完全一样.

namespace DataAccess
{
[Export(typeof(IDataService))]
[ExportMetadata("Name","Oracle")]
[ExportMetadata("Description","Oracle Data Service")]
public class Oracle : IDataService
{

    #region IDataService Members

    public string Name
    {
        get { return "Oracle"; }
    }

    public string Description
    {
        get { return "Provides data access to Oracle database"; }
    }

    public List<string> GetPeople()
    {
        return new List<String>() { "Oracle boo", "Oracle boo1" };
    } …
Run Code Online (Sandbox Code Playgroud)

c# mef

6
推荐指数
1
解决办法
3733
查看次数

ForEach with EditorFor

我有一个Entity模型,其中包含Message对象的集合,Message对象具有多个属性,包括content,MessageID,from和to.

我已经为Message类型创建了一个EditorTemplate,但是,我无法让它显示Messages集合的内容.

没有错误,但没有输出.

请注意,视图代码来自父级Talkback类的EditorTemplate.你有一个EditorTemplate为子集合调用另一个EditorTemplate吗?

Talkback和Message类都是由现有数据库中的Entity框架生成的.

查看代码:

        <% foreach (TalkbackEntityTest.Message msg in Model.Messages)
    { 
           Html.EditorFor(x=> msg, "Message"); 
    } %>
Run Code Online (Sandbox Code Playgroud)

这是我的模板代码.它是标准的自动生成的视图代码,带有一些细微的变化.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TalkbackEntityTest.Message>" %>

    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.MessageID) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.MessageID) %>
            <%: Html.ValidationMessageFor(model => model.MessageID) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.acad_period) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.acad_period) %>
            <%: Html.ValidationMessageFor(model => model.acad_period) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.talkback_id) %>
        </div>
        <div …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework editorfor editortemplates asp.net-mvc-2

3
推荐指数
1
解决办法
3667
查看次数

标准定价层的 Azure 服务总线命名空间中缺少主题部分

我有 2 个服务总线命名空间,都位于标准层。

两者中较旧的仅显示“队列”选项,并且创建主题的选项被禁用,但是命名空间中存在现有主题,并且这些选项都可以正常工作。 在此输入图像描述

今天创建的新版本启用了主题。

它们都在门户中显示为标准层:

命名空间缺失主题:

在此输入图像描述

具有主题的命名空间:

在此输入图像描述

如果我尝试将较旧的主题更改为基本主题,则会由于现有主题而失败。我的理论是,这是门户中的一个错误,虽然底层的 Azure 基础设施和门户的扩展部分知道这是一个标准层,但它的某些部分无法识别这一点,因此缺少主题。

还应该注意的是,如果我生成自动化脚本,它希望将此命名空间创建为基本 SKU,而将另一个命名空间创建为标准。可能在过去的某个时候(很多年前),这是一个基本层。

所以我的问题是,是否还有其他我可以检查的旧名称空间可能不正确,我可以解决,或者这是门户中的错误?

azure azureservicebus azureportal

3
推荐指数
1
解决办法
2398
查看次数

Oracle变量

我正在尝试编写一个Oracle查询,在查询之前设置了一些变量,然后我可以在查询中引用它.

我可以在SQL Server中执行以下操作:

DECLARE @ReviewID as VARCHAR(3)
DECLARE @ReviewYear AS VARCHAR(4)

SET @ReviewID = 'SAR'
SET @ReviewYear = '1011'

select * from table1 where review_id = @ReviewID and acad_period = @reviewyear
Run Code Online (Sandbox Code Playgroud)

Oracle的上述内容是什么?我已经尝试过游标和绑定变量,但显然做错了,因为这些方法不起作用.

Oracle查询旨在进入SSIS中的OLEDB源,然后从包级变量设置变量.

oracle variables plsql ssis

2
推荐指数
1
解决办法
3307
查看次数

mscorlib.dll中发生了未处理的"System.StackOverflowException"类型异常

我有以下sub,它检查节点时检查Windows窗体树视图中的所有节点的子节点.每当我点击它时,我都会收到主题中所述的错误,但这只会在设置checked属性时发生.如果我只是运行注释掉的MsgBox行,它可以正常工作,没有错误.

Private Sub TreeView1_AfterCheck(ByVal sender As System.Object, ByVal e As _
    TreeViewEventArgs) Handles TreeView1.AfterCheck
    For Each s As TreeNode In TreeView1.Nodes
        If s.Checked = True Then
            For i As Integer = 0 To s.Nodes.Count - 1
                MsgBox(s.Nodes(i).Text)
                s.Nodes(i).Checked = True
            Next
        End If
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

由于这是一个StackOverflow异常,这似乎是最好的问题!

.net treeview winforms

1
推荐指数
2
解决办法
2万
查看次数