我正在使用新的 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 可用时注册它时,我可能做错了什么......