StructureMap - DI - 多重具体实施

时间:2016-11-28 10:54:39

标签: dependency-injection structuremap

我已经提到多个线程的解决方案,但那些没有帮助:(任何帮助提供代码方面的问题解决方案,谢谢

class Program
{
    static void Main(string[] args)
    {
        //StructureMapConfiguration();

        var registry = new Registry();
        registry.IncludeRegistry<DependencyRegistry>();

        var container = new Container(registry);


        var depend = container.GetInstance<ITest>();
        var controller1 = new Controller1(depend);
        controller1.M1();

        var controller2 = new Controller2(depend);
        controller1.M1();
        Console.Read();
    }

}


public interface ITest
{
    void Method();
}

public class A : ITest
{
    public void Method()
    {
        Console.WriteLine("A");
    }
}

public class B : ITest
{
    public void Method()
    {
        Console.WriteLine("B");
    }
}


public class C : ITest
{
    public void Method()
    {
        Console.WriteLine("C");
    }
}

public interface IController
{
    void M1();
}

public class Controller1 : IController
{
    private ITest _test;
    public Controller1()
    {

    }
    public Controller1(ITest test)
    {
        _test = test;
    }

    public void M1()
    {
        _test.Method();
    }
}

public class Controller2 : IController
{
    private ITest _test;
    public Controller2(ITest test)
    {
        _test = test;
    }

    public void M1()
    {
        _test.Method();
    }
}

public class DependencyRegistry : Registry
{
    public DependencyRegistry()
    {

        For<ITest>().Use<A>().Named("A");
        For<ITest>().Use<B>().Named("B");
        For<ITest>().Use<C>().Named("C");


        For<IController>().Add<Controller1>().Ctor<ITest>().Is(i => i.GetInstance<ITest>("A"));
        For<IController>().Add<Controller2>().Ctor<ITest>().Is(i => i.GetInstance<ITest>("B"));

        Scan(x =>
        {
            x.AssembliesFromApplicationBaseDirectory();
            x.AddAllTypesOf<ITest>().NameBy(type => type.Name);
            x.WithDefaultConventions();
        });

    }
}

}

实际结果: 每次我得到Controller1和Controller2的C类实例

预期成果: 对于Controller1,我需要A类的实例,而对于Controller2,我需要B类的实例

提前致谢

0 个答案:

没有答案