Autofac - 一个接口,多种实现

Autofac - One interface, multiple implementations

单一接口:IDoSomething {...}

两个 classes 实现了该接口:

ClassA : IDoSomething {...}

ClassB : IDoSomething {...}

一个 class 使用这些 class 中的任何一个。

public class DummyClass(IDoSomething doSomething) {...}

没有 Autofac 的代码:

{
....
IDoSomething myProperty;

if (type == "A")

    myProperty = new DummyClass (new ClassA());

else

    myProperty = new DummyClass (new ClassB());


myProperty.CallSomeMethod();
....
}

是否可以使用 Autofac 实现类似的功能?

提前致谢,

你要找的是,我记得是 Strategy Pattern。您可能有单个接口的 N 个实现。只要您将它们全部注册,Autofac 或任何其他 DI 框架都应该提供它们。

其中一个选项是在接口内创建一个带有私有 setter 或仅 getter 的 属性 声明,然后在每个 属性 中实现 属性 class。在需要select正确实现的class中,构造函数应该有参数IEnumerable<ICommon>

Autofac 或任何其他 DI 框架应该注入所有可能的实现。之后,您可以旋转 foreach 并搜索所需的 属性.

它可能看起来像这样。

public interface ICommon{ 
        string Identifier{get;}
        void commonAction();
    }

    public class A: ICommon{
        public string Identifier { get{return "ClassA";}  }

        public void commonAction()
        {
            Console.WriteLine("ClassA");
        }
    }

    public class A: ICommon{
        public string Identifier { get{return "ClassB";}  }

        public void commonAction()
        {
            Console.WriteLine("ClassA");
        }
    }

    public class Action{
        private IEnumerable<ICommon> _common;

        public Action(IEnumerable<ICommon> common){
            _common = common;
        }

        public void SelectorMethod(){
            foreach(var classes in _common){
                if(classes.Identifier == "ClassA"){
                    classes.commonAction();
                }
            }
        }
    }