小编Tim*_*rts的帖子

子类的HQL查询

我在我的实体模型中定义了以下实体:

public class MyContainer
{
   public virtual ICollection<Base> Subs { get; set; }
}

public abstract class Base
{
   public virtual Guid Id { get; set; }
}
public abstract class Sub1 : Base
{
   public virtual int MyValue { get; set; }
}
public abstract class Sub2 : Base
{
   public virtual int MyValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及上述实体的以下FluentNHibernate映射:

public sealed class BaseMap : ClassMap<Base>
{
   public BaseMap()
   {
      Table("BaseTable");
      Id(e => e.Id);
   }
}

public sealed class …
Run Code Online (Sandbox Code Playgroud)

nhibernate hql

5
推荐指数
1
解决办法
1757
查看次数

使用CompositionBatch对象从CompositionContainer中删除零件

我有一个基于MEF的解决方案,它有几个导出的接口实现.

我希望能够做的是有一个开关,删除与界面相关的所有当前部件,取而代之的是只用一个实现替换它们.我一直试图用一个CompositionBatch对象做这个,但它似乎不起作用.这是我正在做的一个例子:

[Export(typeof(IFoo)]
public class Foo1 : IFoo
{ }

[Export(typeof(IFoo)]
public class Foo2 : IFoo
{ }
Run Code Online (Sandbox Code Playgroud)

然后我有我的容器:

var container = new CompositionContainer(....);
Run Code Online (Sandbox Code Playgroud)

现在将包含代表Foo1和的部分Foo2.我想做的是用另一个IFoo实现替换它们.这就是我正在尝试的,我认为这会起作用:

var partsToRemove
   = from part in container.Catalog.Parts
       from exDef in part.ExportDefinitions
       where exDef.ContractName == AttributedModelServices.GetContractName(typeof(IFoo))
     select part.CreatePart();

var batch = new CompositionBatch(null, partsToRemove);

batch.AddPart(new Foo3());

container.Compose(batch);
Run Code Online (Sandbox Code Playgroud)

我期待container.Catalog.Parts改变以反映我的变化,但事实并非如此.它与首次创建容器时保持一致.

我错过了什么?这甚至是正确的方法吗?我已经阅读了Glenn Block关于使用ExportProviders的CodeBetter文章,但他提到他将编写第2部分,其中他将介绍如何实现过滤ExportProvider(可能更接近我需要做的事情).

mef

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

标签 统计

hql ×1

mef ×1

nhibernate ×1