什么使ServiceLocator成为反模式?

时间:2017-10-16 11:40:16

标签: c# anti-patterns service-locator

我正在努力解决使ServiceLocator成为反模式的问题。

有人说,传递容器会使其成为反模式,其他人则担心应用程序增长后的可维护性(隐藏的依赖关系)。 以下示例演示了使用AutoFac进行的简单注册,包括依赖项:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AutoFacSample
{
    using System.Reflection;
    using Autofac;    

    class Program
    {
        static void Main(string[] args)
        {
            var assembly = Assembly.GetExecutingAssembly();
            var builder = new ContainerBuilder();
            builder.RegisterAssemblyTypes(assembly).Where(t => t.Name.Contains("First")).AsImplementedInterfaces();            
            Holder.Container = builder.Build();
            var first = Holder.Container.Resolve<IFirst>();
        }
    }

   public static class Holder
    {
        public static IContainer Container { get; set; }
    }

   public interface IFirst {}

   public interface ISecond {}

   public interface IThird {}

   public class First : IFirst
    {
        public First(ISecond second)
        {        
        }
    }

   public class Second : ISecond
    {
        public void Foo()
        {
            var third = Holder.Container.Resolve<IThird>();            
        }
    }

    public class Third : IThird {}    

}

您会将我的样本视为反模式吗?如果是这样,有什么好的选择吗?

修改
我知道问题Is ServiceLocator an anti-pattern?,但答案并不能解释我的样本是不是反模式的天气。

谢谢,

特里尼

0 个答案:

没有答案