1

我正在研究这种模式,我想执行一个方法,但我不知道如何调用它,因为这些参数化构造函数对我来说似乎很复杂。我遵循的代码由两个接口和两个类组成。下面是示例代码。请帮助我如何调用“TestMethod()”。如果可能的话,有人可以帮助我实现以下目标。

  1. 调用“TestMethod()”。
  2. 解释这种模式及其重要性。(如果简单更好,请帮助如何简化它们)。
  3. 解释为什么构造函数是参数化的。(如果简单更好,请帮助如何简化它们)。

控制台应用程序

 class Program
    {
        private static IPropertyService _property;
        public Program(IPropertyService property)
        {
            _property = property;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Enter something...");
            _property.TestMethod(Console.ReadLine());
            Console.ReadLine();
        }
        public interface IPropertyService
        {
            string TestMethod(string strParam);
        }

        private class PropertyService : IPropertyService
        {
            private readonly IPropertyRepository _propertyRepository;

            public PropertyService(IPropertyRepository propertyRepository)
            {
                _propertyRepository = propertyRepository;
            }
            public string TestMethod(string strParam)
            {
                return _propertyRepository.TestMethod(strParam);
            }
        }
    }

    public interface IPropertyRepository
    {
        string TestMethod(string strParam);
    }
    public class PropertyRepository : IPropertyRepository
    {
        public string TestMethod(string strParam)
        {
            return string.Format("You have entered: {0}", strParam);
        }
    }
4

1 回答 1

1

程序是你的入口点类。不要使其参数化构造函数。它不会工作。

public Program(IPropertyService property)

您不需要定义IPropertyService为私有静态方法。在 Main 方法中本地声明它就可以了。

static void Main(string[] args)
{
    Console.WriteLine("Enter something...");
    IPropertyService _property = //to be added;
    _property.TestMethod(Console.ReadLine());
    Console.ReadLine();
}

现在让我们谈谈该//to be added部分。

在这种情况下,迄今为止最简单的解决方案是使用Abstract Factory。手动编码示例:

public class PropertyServiceFactory{
  public IPropertyService Create(){
    IPropertyRepository repository = new PropertyRepository();
    PropertyService service = new PropertyService(repository);
    return service; 
  }
}

实施:

Console.WriteLine("Enter something...");
PropertyServiceFactory factory = new PropertyServiceFactory();
IPropertyService _property = factory.Create();
_property.TestMethod(Console.ReadLine());

但是,如果您想打破 PropertyServiceFactory 和 PropertyRepository 之间的依赖关系,请将您的工厂修改为:

public class PropertyServiceFactory{
  private readonly IPropertyRepository _repository;
  public PropertyServiceFactory(IPropertyRepository repository){
    _repository = repository
  }
  public IPropertyService Create(){
    PropertyService service = new PropertyService(_repository);
    return service; 
  }
}

这样,您就将 PropertyServiceFactory 和 PropertyRepository 解耦了。实施是:

Console.WriteLine("Enter something...");
IPropertyRepository repository = new PropertyRepository();
PropertyServiceFactory factory = new PropertyServiceFactory(repository);
IPropertyService _property = factory.Create();
_property.TestMethod(Console.ReadLine());

归功于马克·西曼

于 2013-03-21T08:58:35.353 回答