我试图编写一些代码,允许我动态地将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) 我有下面的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#比较新,所以我还不熟悉它的所有怪癖/功能.
我试图在一个项目中学习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)
和我有麻烦试图让DropDownListFor走MethodList在ViewData.当我尝试:
<%: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)
对此非常满意. …
我刚开始使用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) 我有一个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) 我有 2 个服务总线命名空间,都位于标准层。
两者中较旧的仅显示“队列”选项,并且创建主题的选项被禁用,但是命名空间中存在现有主题,并且这些选项都可以正常工作。

今天创建的新版本启用了主题。
它们都在门户中显示为标准层:
命名空间缺失主题:
具有主题的命名空间:
如果我尝试将较旧的主题更改为基本主题,则会由于现有主题而失败。我的理论是,这是门户中的一个错误,虽然底层的 Azure 基础设施和门户的扩展部分知道这是一个标准层,但它的某些部分无法识别这一点,因此缺少主题。
还应该注意的是,如果我生成自动化脚本,它希望将此命名空间创建为基本 SKU,而将另一个命名空间创建为标准。可能在过去的某个时候(很多年前),这是一个基本层。
所以我的问题是,是否还有其他我可以检查的旧名称空间可能不正确,我可以解决,或者这是门户中的错误?
我正在尝试编写一个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源,然后从包级变量设置变量.
我有以下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异常,这似乎是最好的问题!