Ninject: ядро, разрешающее фабричные экземпляры - PullRequest
0 голосов
/ 04 февраля 2020

Я вынужден использовать Ninject в проекте, который требует. NET 3.5, и это мешает мне использовать все преимущества автоматического создания фабрики c, которое обеспечивается расширением Factory.

Итак, я быстро реализовал ручную реализацию фабрики, которая должна предоставлять операции, выполняемые по требованию. Для этого я планировал передать имя и аргументы операции фабрике, которая, в свою очередь, должна использовать эти параметры для создания экземпляра со всеми его зависимостями:

public class ServiceOperationFactory : IServiceOperationFactory
{
    private static readonly string OP_NAMESPACE = "MyApp.Operations";

    private IKernel kernel;

    public ServiceOperationFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public IServiceOperation Create(string name, object[] args)
    {
        var opType = Type.GetType( string.Format("{0}.{1}Operation", OP_NAMESPACE, name) );

        var argsParam = new ConstructorArgument("args", args);
        return kernel.Get(opType, argsParam) as IServiceOperation;
    }
}

Вы заметите, что я ввел Ядро в фабрику (Ninject, по-видимому, позволяет мне это делать), чтобы получить экземпляр запрошенной операции со всеми автоматически разрешаемыми зависимостями, и это подход, который предлагается документацией Zenject в Unity при работе с пользовательскими реализациями фабрики.

Это действительно приемлемая практика или скрытый сервисный локатор?

...