Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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# 为什么在DI中使用带Unity的Building_C#_Dependency Injection_Unity Container - Fatal编程技术网

C# 为什么在DI中使用带Unity的Building

C# 为什么在DI中使用带Unity的Building,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我正在试图弄清楚为什么/什么时候我会使用Unity容器的构建方法。如果我有以下资料: [TestInitialize] public void SetupEnvironment() { var container = new UnityContainer(); container.RegisterType<ILocalizingKeyHolder, FeeTypeKeyHolder>( typeof(FeeType).Name); va

我正在试图弄清楚为什么/什么时候我会使用Unity容器的构建方法。如果我有以下资料:

[TestInitialize]
public void SetupEnvironment()
{
    var container = new UnityContainer();
    container.RegisterType<ILocalizingKeyHolder, FeeTypeKeyHolder>(
        typeof(FeeType).Name);    
    var keyHolderFactory = new UnityLocalizingKeyHolderFactory(container);
    var ctx = new TspDbContext(keyHolderFactory);
    ...
}
keyHolderFactory的实现如下:

public class UnityLocalizingKeyHolderFactory : ILocalizingKeyHolderFactory
{
    private UnityContainer Container { get; set; }

    public UnityLocalizingKeyHolderFactory(UnityContainer container)
    {
        this.Container = container;
    }

    public void AttachKeyHolder(ILocalizableEntity localizableEntity)
    {
        localizableEntity.KeyHolder = Container.Resolve<ILocalizingKeyHolder>(
            localizableEntity.GetType().Name);
        localizableEntity.UpdateLocalizingKey();
    }
}
公共类UnityLocalizingKeyHolderFactory:ILocalizingKeyHolderFactory
{
私有UnityContainer容器{get;set;}
公共单元校准Keyholder工厂(单元容器)
{
this.Container=Container;
}
public void AttachKeyHolder(ILocalizableEntity localizableEntity)
{
localizableEntity.KeyHolder=容器.Resolve(
localizableEntity.GetType().Name);
localizableEntity.UpdateLocalizingKey();
}
}
我真的看不出使用Building将LocalizingKeyHolder注入实体有什么好处

这个

localizableEntity.KeyHolder=
Resolve(localizableEntity.GetType().Name);
看起来很简单。因此:

  • 构建仅仅是一种语法糖的形式吗?如果我有多个属性来解析类型,那么我可以只使用一行代码来实现它,而不是解析每个属性一次
  • 我是否必须对我要构建的每个属性都设置依赖项属性
  • 我可以将命名注册用于构建吗
  • 使用积层还有什么其他好处

  • @乔治-谢谢。我得到了那么多,但为什么要使用它呢?既然我还必须将它传递到容器中,那么上面我没有做过的其他事情还有什么?
    public class UnityLocalizingKeyHolderFactory : ILocalizingKeyHolderFactory
    {
        private UnityContainer Container { get; set; }
    
        public UnityLocalizingKeyHolderFactory(UnityContainer container)
        {
            this.Container = container;
        }
    
        public void AttachKeyHolder(ILocalizableEntity localizableEntity)
        {
            localizableEntity.KeyHolder = Container.Resolve<ILocalizingKeyHolder>(
                localizableEntity.GetType().Name);
            localizableEntity.UpdateLocalizingKey();
        }
    }
    
    localizableEntity.KeyHolder =
        Container.Resolve<ILocalizingKeyHolder>(localizableEntity.GetType().Name);