如何使用工厂模式进行依赖注入和输入参数?

问题描述 投票:0回答:1

我试图了解如何使用工厂模式和依赖注入(Microsoft.Extensions.DependencyInjection)在运行时使用一些输入配置创建服务实例(例如,ITransport)。 我很确定使用 Ninject 会让任务变得更容易,但我仍然想坚持使用 Microsoft 的 DI。

例如,以下是我们的服务:

public interface ITransport
{
    string Type { get; }
    void Move();
}
public class CarConfig { }
public class Car(CarConfig config) : ITransport
{
    public string Type => nameof(Car);
    public void Move() { /* logic */ }
}
public class BoatConfig { }
public class Boat(BoatConfig config) : ITransport
{
    public string Type => nameof(Boat);
    public void Move() { /* logic */ }
}

或者也许这样更好:

public class Car(IConfig config) : ITransport {...}
public class Boat(IConfig config) : ITransport {...}

它们每个在构造函数中都有一些输入配置。而且,它们每个都有不同的依赖关系,因此它们只需要通过 DI 创建。

这是获得必要服务(运输)的工厂:

public interface ITransportFactory
{
    ITransport GetTransport(string type, object config);
    // or
    ITransport GetTransport(string type, IConfig config);
}

我看到了十几种实现这一点的方法,但我不确定其中是否有效。 请帮忙。

c# design-patterns dependency-injection factory-pattern
1个回答
0
投票

您可以将工厂注入到一个类中,类似于您在here看到的内容。你的班级可能有这样的东西:

public class YourClass
{
   private readonly ITransportFactory _transportFactory;

   public YourClass(ITransportFactory transportFactory)
   {
       _transportFactory = transportFactory;
   }

   public void YourTransportMethod(string type, object config)
   {
        var transport = _transportFactory.GetTransport(type, config);
   }
© www.soinside.com 2019 - 2024. All rights reserved.