我试图了解如何使用工厂模式和依赖注入(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);
}
我看到了十几种实现这一点的方法,但我不确定其中是否有效。 请帮忙。
您可以将工厂注入到一个类中,类似于您在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);
}