小编Shr*_*ike的帖子

MEF:如何为合同实施手动配置导出

我有一个MEF的CompositionContainer,一个契约(比如IFoo)和一个模块(Prism模块,但这里没什么关系,只是一些组件).我希望在我的模块中注册合同的实现(FooImpl).

如果它是Unity我会这样做:

unity.RegisterType<IFoo, FooImpl>().
Run Code Online (Sandbox Code Playgroud)

就这样.有了MEF,我很困惑.我必须使用ExportAttribute标记我的实现,但这会导致它自动导出.我想自己管理这个.看看代码:

class MyModule: IModule {
  private CompositionContainer m_container;
  public MyModule(CompositionContainer container) {
    m_container = container;
  }
  public void Initialize() {
    ??? I want something like m_container.CreateExport<IFoo, FooImpl>()
  }
}

public interface IFoo {}
public class FooImpl : IFoo {
    //[ImportingConstructor]
    public FooImpl(ISomeService svc) {}
}
Run Code Online (Sandbox Code Playgroud)

在Initialize中,我希望manualy 导出 FooImpl,因为IFoo合约不依赖于FooImpl类的ExportAttribute.我知道我只能创建一个实例FooImpl(在上面的MyModule.Initialize中),但是FooImpl对其他组件/服务有构造函数依赖关系,我希望它们在创建时得到解析.

所以我可能会问:如何手动添加具有CompositionContainer实例和合同的导出?然后以某种方式标记此导出,因为它具有ImportingConstructorAttribute?

.net mef

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

Electron 中的 Vite + Vue3:如何导入和使用 Material Design 图标 @mdi/font(或任何其他图标字体)

我想将 @mdi/font 图标捆绑到我的应用程序中(它是一个 Electron 应用程序)。

我安装了npm i @mdi/font --save-dev

  "devDependencies": {
    "@mdi/font": "^7.0.96",
  }
Run Code Online (Sandbox Code Playgroud)

然后我导入了 css/scss,我尝试了几种不同的方法:

  • 导入main.tsimport '@mdi/font/css/materialdesignicons.css';
  • 导入为 scss main.scss@import './node_modules/@mdi/font/scss/materialdesignicons.scss';
  • 导入为 css base.css@import './node_modules/@mdi/font/css/materialdesignicons.css';

然后我在标记中使用了 mdi-* css 类:

SideMenu.vue:

<template>
  <aside class="menu">
    <ul class="action-bar">
      <li class="action-item active">
        <a class="action-label icon">
          <i class="mdi-cog"></i>
        </a>
      </li>
      <li class="action-item">
        <a class="action-label icon">
          <i class="mdi-home"></i>
        </a>
      </li>
      <li class="action-item">
        <a class="action-label icon">
          <i class="mdi-content-copy"></i>
        </a>
      </li>
    </ul>
  </aside>
</template>
Run Code Online (Sandbox Code Playgroud)

该应用程序启动并运行,但我看到相同的图标。

在此输入图像描述

需要考虑的事项:

  • 我不想使用每个图标组件的方法(看不到重点),那是因为我不使用“vue-material-design-icons”等
  • 我不想使用 …

vue.js material-design-icons vuejs3 vite

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

VS2010:VSIX安装不会在其中部署项模板

给出了两个VSX项目的演示解决方案:1.添加新项目 - >可扩展性 - >项目模板 - "ItemTemplate1"2.添加新项目 - >可扩展性 - > VSIX项目 - "VSIXProject1"

我没有对"ItemTemplate1"进行任何更改,因此它构成了默认项模板(ItemTemplate1.vstemplate):

<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
  <Name>ItemTemplate1</Name>
  <Description>&lt;No description available&gt;</Description>
  <Icon>ItemTemplate1.ico</Icon>
  <TemplateID>e298765c-97b8-4f4c-9b7b-a6b368f914df</TemplateID>
  <ProjectType>CSharp</ProjectType>
  <RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
  <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
  <DefaultName>Class.cs</DefaultName>
</TemplateData>
<TemplateContent>
    <References>
        <Reference>
            <Assembly>System</Assembly>
        </Reference>
    </References>
  <ProjectItem ReplaceParameters="true">Class.cs</ProjectItem>
</TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)

在VSIXProject1中,我只编辑了source.extension.vsixmanifest,添加了对ItemTemplates1项目的引用.在此之后,vsixmanifest只包含一个内容描述:

<Content>
    <ItemTemplate>ItemTemplates</ItemTemplate>
</Content>
Run Code Online (Sandbox Code Playgroud)

然后建造它.在bin/debug中我得到了VSIXProject1.vsix,在其中我可以在ItemTemplates\CSharp\1033\ItemTemplate1.zip文件中看到我的项目模板.

一切看起来都很棒!

除了它不起作用的事实.我运行VSIXProject1.vsix,安装了vsix(我可以在扩展管理器中看到它),没有任何模板被复制到"C:\ Users\{UserName}\Documents\Visual Studio 2010\Templates\ItemTemplates"!

vsx visual-studio-2010 visual-studio-sdk vsix

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

ReSharper:覆盖默认命名空间以防止“命名空间与文件位置不对应”

给定两个项目:

  • 模型,程序集“Company.Product.Model”,默认命名空间“Company.Product.Model”
  • Model.Server,程序集“Company.Product.Model.Server”,默认命名空间“Company.Product.Model.Server”

如您所见,两个项目都有不同的默认命名空间。这是为了资源 - 两个项目都有自己的 resource.resx ,它将具有基于项目默认命名空间的全名。

但是这两个项目都有与“模型”相关的类,所以我希望它们在同一个命名空间中——“Company.Product.Model”。所以我在两个项目中都使用了这个命名空间。

问题是 ReSharper 要求我对“Model.Server”项目中的类使用命名空间“Company.Product.Model.Server”,因为它是默认(基本)命名空间:“命名空间不对应于文件位置...”。

我知道默认情况下它很好。但我想覆盖它 - 并告诉它我所有的类命名空间都基于“Company.Product.Model”而不更改项目的默认命名空间。

是否可以?

c# resharper

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