1

我正在使用新的 MS 框架开发一个新的 MVC 应用程序,并且在尝试将 IServiceDescriptor 转换为 LightInject IServiceContainer 时遇到了麻烦...

我之所以这样做,是因为在新的 MS MVC 框架中,我们有:

公共 IServiceProvider 配置服务(IServiceCollection 服务)

在启动。我希望能够遍历它并构建一个新的 IServiceProvider ,其中将包含我希望应用程序使用的相关服务管理器。

我在这里查看了来源: https ://github.com/aspnet/DependencyInjection/tree/dev/src

但我似乎无法弄清楚!

这是我到目前为止所拥有的:

    public void RegisterMvcDescriptorInstance(IServiceDescriptor service)
    {
        var name = service.ServiceType.Name;
        if (name.Contains("Hosting"))
        {

        }
        ILifetime lifetime;
        switch (service.Lifecycle)
        {
            case LifecycleKind.Singleton:
                lifetime = new PerContainerLifetime();
                break;
            case LifecycleKind.Scoped:
                lifetime = new PerScopeLifetime();
                break;
            case LifecycleKind.Transient:
                lifetime = null;
                break;
            default:
                lifetime = null;
                break;
        }

        if (service.ImplementationType != null)
        {
            if (lifetime == null)
            {
                MsMvcServiceContainer.Register(service.ServiceType,
                                               service.ImplementationType,
                                               MsMvcServiceName);
                return;
            }
            MsMvcServiceContainer.Register(service.ServiceType,
                                           service.ImplementationType,
                                           MsMvcServiceName,
                                           lifetime);
            return;
        }
        if (service.ImplementationFactory != null)
        {
            if (lifetime == null)
            {
                MsMvcServiceContainer.Register(factory =>
                                               service.ImplementationFactory,                                                   
                                               MsMvcServiceName);
                return;
            }
            MsMvcServiceContainer.Register(factory =>
                                           service.ImplementationFactory,
                                           MsMvcServiceName,
                                           lifetime);
            return;
        }
        MsMvcServiceContainer.RegisterInstance(service.ServiceType,
                                               service.ImplementationInstance,
                                               MsMvcServiceName);
    }

到目前为止,我怀疑当我尝试在 ImplementationFactory 可用时注册它时,我可能做错了什么......

4

0 回答 0