【问题标题】:How to inject only one object to constructor using unity DI如何使用统一 DI 仅向构造函数注入一个对象
【发布时间】:2018-02-07 14:48:35
【问题描述】:

如何使用 Unity DI 仅向构造函数注入一个对象。 示例:

public class MyClass{

public MyClass(ILog logger, IProvider provider, IResolver resolver, ItemTypeEnum itemType)
{
   //.... initializing everything
}

public ItemTypeEnum ItemType { get; set;}

//....methods where I will use this itemKind
}

我只想将 itemType 值注入构造函数,在实现中使用此 itemType 取决于此枚举的值。

【问题讨论】:

  • 我不得不问,你为什么只想注入其中一个依赖项?
  • 如果你必须问这个问题,这表明MyClass 承担了不止一项责任,因此违反了单一责任原则。

标签: c# c#-4.0 unity-container


【解决方案1】:

免责声明:我可能把问题弄错了,但对我来说,注入所有依赖项才有意义但是 itemType,而不是相反。

最简单的选择是使用CreateMyClass( ItemTypeEnum itemType ) 方法创建MyClassFactory。详情见over there...

【讨论】:

    【解决方案2】:

    您可以使用InjectionConstructor 并在解析过程中提供参数。示例如下:

    container.RegisterType<ILog, Log>();
    container.RegisterType<IResolver, Resolver>();
    container.RegisterType<IProvider, Provider>();
    container.RegisterType<MyClass>(new InjectionConstructor(
        new ResolvedParameter<ILog>(),
        new ResolvedParameter<IProvider>(),
        new ResolvedParameter<IResolver>(),
        typeof(ItemTypeEnum)));                
    
    MyClass mc = container.Resolve<MyClass>(new ParameterOverride("itemType", ItemTypeEnum.Value));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多