我想知道注册容器本身是否有任何副作用
IContainer container; ContainerBuilder builder = new ContainerBuilder(); container = builder.Build(); builder.RegisterInstance(container).As<IContainer>();
并使用它像这样
builder.RegisterType<IManagmentServiceImp>().As<ManagmentServiceImp>() .WithParameter(new ResolvedParameter( (pi,ctx) => pi.ParameterType == typeof(IContainer) && pi.Name == "Container",(pi,ctx) => container ));
或者它是否会起作用.
解决方法
您的代码不安全,因为您在初始化之前注册了一个实例.
如果您需要访问组件内的容器(这不是一个好主意),您可以依赖具有Resolve方法的ILifetimeScope.
public class ManagmentServiceImp { public ManagmentServiceImp(ILifetimeScope scope) { } }
ILifetimeScope在Autofac中自动注册,您无需为其添加注册.
有关详细信息,请参阅Autofac文档中的Controlling Scope and Lifetime.
顺便说一句,依赖IoC容器并不是一个好习惯.看起来你使用Service Locator反模式.如果您需要容器延迟加载依赖项,则可以使用Func< T>组合.或懒惰< T>
public class ManagmentServiceImp { public ManagmentServiceImp(Lazy<MyService> myService) { this._myService = myService; } private readonly Lazy<MyService> _myService; }
在这种情况下,首次访问时将创建MyService.
有关详细信息,请参阅Autofac文档中的Implicit Relationship.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。