小编bri*_*ave的帖子

从MEF容器中取出

这个问题似乎已被问过几次,但我还没有找到任何实际有效的答案.很简单,我如何从MEF容器中删除一些东西.

即使这里显示的代码https://mef.codeplex.com/wikipage?title=Parts%20Lifetime在AddPart/RemovePart下也不起作用,因为它不会按列出的方式进行编译.代码显示了这个:

    var catalog = new AssemblyCatalog(typeof(Program).Assembly);
    var container = new CompositionContainer(catalog);
    var root = new Root();

    // add external part
    container.ComposeParts(root);

    // ... use the composed root instance

    // removes external part
    batch = new CompositionBatch();
    batch.RemovePart(root);
    container.Compose(batch);
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为对RemovePart的调用需要一个根本没有的ComposablePart.其他简单示例显示如何创建零件并删除零件,但会记住对创建零件的引用(如ComposablePart),因此删除仅使用该引用.我不希望在创建容器时保持对容器中每个部分的引用,我只想在应用程序中的任意点从容器中删除一个部分,而不必始终保持对它的引用.

以下是我尝试使用上面链接的文档中列出的完全相同的模式:

public class Program
{
    [Import]
    private IClass myClass;

    public Program()
    {
        var container = new CompositionContainer(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
        container.ComposeParts(this);

        var partToRemove = container.GetExport<IClass>();

        var batch = new CompositionBatch();
        batch.RemovePart(partToRemove);
        container.Compose(batch);
    }

    public static void Main(string[] args)
    {
        var …
Run Code Online (Sandbox Code Playgroud)

c# mef

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

使用剔除绑定和razor语法

我想知道是否有可能在Razor语法中使用Knockoutdata-bind

我认为此代码如下:

<tbody data-bind="foreach: relays">
    <tr>
        <td id="body-button-column">
            <button class="btn btn-default btn-sm" title="Remove relay" data-bind="click: $parent.removeRelay">
                <i class="glyphicon glyphicon-remove-circle"></i>
            </button>
        </td>
        <td><input type="text" data-bind="value: $index"/></td>
        <td>@Html.DropDownList("RelayConfigurations[" + $index + "].Address", Model.Addresses, "Select an Item")</td>
    </tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

我的视图模型具有以下属性

self.relays = ko.observableArray(@Html.Raw(Json.Encode(Model.RelayConfigurations)));
Run Code Online (Sandbox Code Playgroud)

其中RelayConfigurations是模型上的集合对象。

在使用Razor语法的行中@Html.DropDownList……我想为$ index值使用敲除绑定,但不确定如何做到这一点。或者,即使有可能。

如果我用$index硬编码值零替换该行中的,则控制器操作中的模型绑定将在回发时按预期工作(尽管由于硬编码值为零,所以仅集合中的第一个中继具有任何数据) 。

c# asp.net-mvc razor knockout.js

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

Entity Framework + ASP.NET Identity + Repository Pattern - 如何在加载用户的同时加载角色

我有一个使用实体框架和存储库模式的 MVC 5 应用程序。我有一个用于用户表 (AspNetUsers) 的存储库和一个名为 GetAll() 的存储库中的方法,用于从该表中获取所有用户。

我需要向我的应用程序的用户显示所有用户及其角色,但我很难通过我的用户存储库获取角色的实际名称。我正确编写的 GetAll() 方法将所有用户及其角色 ID 返回给我,如关联表 AspNetUserRoles 中所定义,但我还需要加载角色名称。

从我的存储库中获取所有用户的代码行如下所示:

var users = UsersRepository.GetAll();
Run Code Online (Sandbox Code Playgroud)

我想要的是获取分配给用户的角色的角色名称,以便我可以在应用程序中显示。

对于那些不熟悉 ASP.NET Identity 表的人,有一个表包含看起来像这样的用户信息(为简洁起见,仅列出了相关字段):

AspNet用户

  • ID
  • 用户名

然后还有另一个表,其中包含看起来像这样的角色信息(为简洁起见,仅列出了相关字段):

AspNet角色

  • ID
  • 姓名

最后,中间有一个关联表,看起来像这样:

AspNet 用户角色

  • 用户身份
  • 角色 ID

所以我的基本目标是从用户对象通过关联表来获取我的存储库查询中的所有角色名称。我在想这样的事情:

var usersAndRoles = UsersRepository.GetAll().Include(.......)
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework repository-pattern asp.net-identity

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