[英]Autofac - dependency injection for MVC controller and Web Api controller
[英]Injection in web api controller not using Single Instance
我有一个在我的容器中注册为单个实例的服务
public class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<MyService>()
.As<IMyService>()
.SingleInstance();
}
}
容器如下创建
public static IContainer SetupContainer()
{
var builder = new ContainerBuilder();
var moduleTypes = TypeCache.GetTypes(x => x.IsClassEx() && !x.IsAbstractEx() && x.ImplementsInterfaceEx<IModule>());
foreach (var moduleType in moduleTypes)
{
if (Activator.CreateInstance(moduleType) is IModule module)
builder.RegisterModule(module);
}
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
builder.RegisterAssemblyModules(assemblies);
var result = builder.Build();
return result;
}
所有这些在正常代码中都可以正常工作-我可以注入我的服务,并按我的期望解决它
但是,当我尝试将服务注入Web api控制器时,该服务再次被解析,但是Autofac给了我服务的新实例
如何防止这种行为,以便注入最初创建的实例?
我认为您在这里缺少的是您实际上没有在正确的位置解析容器,因此根据您使用的集成类型,您可以执行以下操作之一。
//For OWIN you could do something like the following.
public class Startup
{
public void Configuration(IAppBuilder app)
{
var container = YourObject.SetupContainer();
// Register the Autofac middleware FIRST. This also adds
// Autofac-injected middleware registered with the container.
app.UseAutofacMiddleware(container);
// ...then register your other middleware not registered
// with Autofac.
}
}
//In your Global.asax.cs
protected void Application_Start()
{
var container = YourObject.SetupContainer();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.