Windows services 如何使用Autofac容器解析类型的实例?

Windows services 如何使用Autofac容器解析类型的实例?,windows-services,autofac,Windows Services,Autofac,在windows服务中,应该如何获取类的实例 显然,新创建一个实例将有损于DI的整体目的。在过去,一个人就可以了 ISomeInterface st=container.Resolve() 在这种情况下,实现ISomeInterface的类在其构造函数中有一个依赖类/接口,例如SomeInterfaceImp(IOtherInterface oi)() 如何使用autofac实现这一点?这是非常标准的依赖项解析/自动连接功能。只要容器中有所有依赖项,解析ISomeInterface也会自动链接到

在windows服务中,应该如何获取类的实例

显然,新创建一个实例将有损于DI的整体目的。在过去,一个人就可以了

ISomeInterface st=container.Resolve()

在这种情况下,实现
ISomeInterface
的类在其构造函数中有一个依赖类/接口,例如
SomeInterfaceImp(IOtherInterface oi)(


如何使用autofac实现这一点?

这是非常标准的依赖项解析/自动连接功能。只要容器中有所有依赖项,解析
ISomeInterface
也会自动链接到任何依赖项,如
IOtherInterface

var builder = new ContainerBuilder();
builder.RegisterType<SomeInterfaceImp>().As<ISomeInterface>();
builder.RegisterType<OtherInterfaceImp>().As<IOtherInterface>();
var container = builder.Build();
var builder=newcontainerbuilder();
builder.RegisterType().As();
builder.RegisterType().As();
var container=builder.Build();
我建议你从那里开始


请注意,如果您正在编写一个长期运行的Windows服务(正如您的标记所建议的),您不应该从容器中解决问题,因为您可能最终导致内存泄漏

谢谢你的回复。我问这个问题的原因是,我发现有关autofac的大多数示例都是将其集成到一个框架中的。e、 g.MVC/web api/webform,它要么使用httphandler/filter将自己挂接到DI的框架中,要么使用httphandler/filter将自己挂接到DI的框架中,但对于编程结构的其余部分,比如让某个类的实例在windows服务中工作,似乎需要创建容器的全局引用以在应用程序中使用,这与服务定位器模式非常相似,在这种情况下引入了新的依赖关系。在Windows服务、WinForms应用程序和其他没有将DI烘焙到框架中的应用程序中,您是对的-您可以自己手动集成它,伴随着所有的优点和缺点。这方面没有“推荐模式”。其中一个问题是范围问题。假设为每个线程设置实例,但在解析实例时需要执行以下操作:使用(var scope=container.BegineLifetimeScope()){Isomeinterface instance=scope.Resolve();}当释放该范围时,它将释放实现IDiposable接口的任何实例。这违背了每线程实例/InstancePerLifetimeScope的目的,不是吗?您可能需要更新您的问题或提出新问题。并不是说我不想帮忙,但问题已经回答了,而且有很多文档和重叠的现有问题/答案,涵盖了听起来你很好奇的其他主题。深入到Autofac文档站点,查看关于处置和线程生命周期范围的现有内容,如果仍然不清楚,请在这里提出一个新问题,并提供更多详细信息。当然,我将为您的讨论提供支持。