Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MEF中,是否有一种方法可以让组合对象获得指向所用ObjectComposer的指针?_C#_.net_Mef - Fatal编程技术网

C# 在MEF中,是否有一种方法可以让组合对象获得指向所用ObjectComposer的指针?

C# 在MEF中,是否有一种方法可以让组合对象获得指向所用ObjectComposer的指针?,c#,.net,mef,C#,.net,Mef,试图建立一个重要的MEF应用程序 我想知道-有没有一种方法可以让正在编写的对象获得指向用于编写它的ObjectComposer的指针 场景是obejct可能必须进行内部合成。到目前为止,我可以通过在属性或构造函数上导入attrobites来推送所有链接,但是我没有找到一种方法让组合对象获得对象生成器(这样它就可以为其内部项创建子生成器) 任何标准/最佳实践方法?我就是这样做的: 我的许多出口商进口伊曼 [Import(typeof(IMain))] public IMain Main { get

试图建立一个重要的MEF应用程序

我想知道-有没有一种方法可以让正在编写的对象获得指向用于编写它的ObjectComposer的指针

场景是obejct可能必须进行内部合成。到目前为止,我可以通过在属性或构造函数上导入attrobites来推送所有链接,但是我没有找到一种方法让组合对象获得对象生成器(这样它就可以为其内部项创建子生成器)

任何标准/最佳实践方法?

我就是这样做的:

我的许多出口商进口伊曼

[Import(typeof(IMain))]
public IMain Main { get; set; }
IMain用作事件服务和原始合成服务的容器

public interface IMain
{
    ICompositionService CompositionService { get; set; }
    EventPublisher Events { get; set; }
    // more...
}
最初的组成如下:

AggregateCatalog Catalog = new AggregateCatalog();
Catalog.Catalogs.Add(new DirectoryCatalog(Application.StartupPath));
CompositionContainer Container = new CompositionContainer(Catalog);
this.CompositionService = Container;  // <- here I'm setting the IMain composition service
Container.ComposeParts(this);
[Import]
public ExportProvider Composer { get; set; }
我就是这样做的:

我的许多出口商进口伊曼

[Import(typeof(IMain))]
public IMain Main { get; set; }
IMain用作事件服务和原始合成服务的容器

public interface IMain
{
    ICompositionService CompositionService { get; set; }
    EventPublisher Events { get; set; }
    // more...
}
最初的组成如下:

AggregateCatalog Catalog = new AggregateCatalog();
Catalog.Catalogs.Add(new DirectoryCatalog(Application.StartupPath));
CompositionContainer Container = new CompositionContainer(Catalog);
this.CompositionService = Container;  // <- here I'm setting the IMain composition service
Container.ComposeParts(this);
[Import]
public ExportProvider Composer { get; set; }
我假设“ObjectComposer”是指MEF容器。我不知道名为
ObjectComposer
的类或概念

edit:now明确提到不应该将容器放在其自身中。因此,下面将删除。)

在应用程序启动代码中,容器可以在自身中注册:

CompositionContainer container = new CompositionContainer(...);
container.ComposeExportedValue<ExportProvider>(container);

但是,您在这里需要的是一个服务定位器,它具有。最好导入更具体的服务,如抽象工厂

在这里可能也有帮助,但这并没有进入.NET4版本。如果您想尝试,您必须使用最新版本。

我假设“ObjectComposer”指的是MEF容器。我不知道名为
ObjectComposer
的类或概念

edit:now明确提到不应该将容器放在其自身中。因此,下面将删除。)

在应用程序启动代码中,容器可以在自身中注册:

CompositionContainer container = new CompositionContainer(...);
container.ComposeExportedValue<ExportProvider>(container);

但是,您在这里需要的是一个服务定位器,它具有。最好导入更具体的服务,如抽象工厂


在这里可能也有帮助,但这并没有进入.NET4版本。如果你想尝试,你必须使用最新版本。

是的,手工编码。我本以为(!)MEF中的某个地方有一个ObjectComposer导出,允许我导入当前的object composer。特别是在处理层次结构时,这是有意义的。层次结构,如“我有一个合成服务,它所合成的项目根据他们自己的需要打开一个子合成程序。”是的,手工编码。我本以为(!)MEF中的某个地方有一个ObjectComposer导出,允许我导入当前的object composer。特别是在处理层次结构时,这是有意义的。层次结构,如“我有一个合成服务,它所合成的项目会根据自己的需要打开一个子合成程序。”是的,就是这样。如果我按照你的要求去做,组成的部分可以解析它们的组成容器。我需要这主要是为服务,然后创建子容器,必须能够组成其内部部分。。。。因此,它们必须获得对合成容器的引用;)我想用MEF注射作为一种常规模式。是的,就是这样。如果我按照你的要求去做,组成的部分可以解析它们的组成容器。我需要这主要是为服务,然后创建子容器,必须能够组成其内部部分。。。。因此,它们必须获得对合成容器的引用;)我很乐意使用MEF注射作为一般模式。