c# - StructureMap - 扫描 - 具有基本实现和特定功能的通用接口(interface)

标签 c# structuremap

我有一个类似这样的界面:

interface IGenericSetupViewModel<T>

然后我有一个默认的实现,像这样

class GenericSetupViewModel<T> : IGenericSetupViewModel<T>

对于一些特定的类,我有一个像这样的特定实现:

class ContractSetupViewModel : GenericSetupViewModel<Contract>

现在我想让 StructureMap 在请求时返回正确的实例

ObjectFactory.GetInstance<GenericSetupViewModel<Contract>();

我想要返回 ContractSetupViewModel,当要求其他任何东西时,我 想获得一个实例

GenericSetupViewModel<T>

我尝试这样做:

        StructureMap.ObjectFactory.Configure(x =>
        {
            x.Scan(y =>
            {
                y.TheCallingAssembly();
                y.AddAllTypesOf(typeof(IGenericSetupViewModel<>));
                y.ConnectImplementationsToTypesClosing(typeof(IGenericSetupViewModel<>));
            });
        });

然而,这导致我总是得到 GenericSetupViewModel 而不是 ContractSetupViewModel。 我不想指定所有特定的 View 模型,那么我是否可以让此扫描工作?

最佳答案

StructureMap 中存在一个短暂的错误,如果您的特定关闭类型没有直接实现该接口(interface),则 ConnectImplementationToTypesClosing 会遇到问题。 一旦您获得最新版本的 StructureMap,以下代码将起作用:

StructureMap.ObjectFactory.Configure(x =>
{
    x.Scan(y =>
    {
        y.TheCallingAssembly();
        y.ConnectImplementationsToTypesClosing(typeof(IGenericSetupViewModel<>));
    });
    x.For(typeof (IGenericSetupViewModel<>)).Use(typeof(GenericSetupViewModel<>));
});

关于c# - StructureMap - 扫描 - 具有基本实现和特定功能的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620650/

相关文章:

c# - 需要 lambda 的 DbQuery.Include() 重载去了哪里?

c# - 代码隐藏文件无法识别 aspx 控件

c# - 依赖需要根据StructureMap中请求的父类型进行不同的配置

c# - StructureMap - 根据具体请求实例化接口(interface) x 实例的属性

c# - 从 C# 中的抽象列表调用对象特定方法

c# - 搜索 ArrayList 包含除两个提及值之外的任何其他值

c# - C#/.NET 作为新标准游戏开发平台的可行性?

StructureMap 插件,注册时调用 init 方法

.net - 将 IOC 容器复古安装到 Brownfield Enterprise .net 应用程序

c# - 通过代码或配置注入(inject)依赖项的优缺点