在过去,我通过让所有控制器继承公共基本控制器,以全局方式将常见属性(例如当前用户)粘贴到ViewData/ViewBag上.
这使得我可以在基本控制器上使用IoC,而不仅仅是为这些数据扩展到全局共享.
我想知道是否有另一种方法将这种代码插入MVC管道?
是否可以在运行时注册服务,这意味着在ContainerBuilder
构建并Container
创建(并ContainerBuilder
处置)之后?
从应用程序中的类中获取Autofac容器的建议方法是什么?Autofac是否提供解析类上的IContainer属性,还是我需要在构建容器后全局存储容器?
鉴于以下注册
builder.Register<A>().As<I>();
builder.Register<B>().As<I>();
builder.Register<C>().As<I>();
var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)
我希望将类型I的所有实例解析为IEnumerable
(数组或集合无关紧要).
在温莎,我会写下面的内容.
foreach(I i in container.ResolveAll<I>())
{
...
}
Run Code Online (Sandbox Code Playgroud)
我正在从Windsor迁移到Autofac 1.4.4.561,但看不到相同的语法.
我已经更新了我的项目中的所有nuget包,以及AutoFac MVC5集成包(删除了MVC4)并且仍然没有骰子.
重写成员时违反了继承安全规则:'Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()'.覆盖方法的安全性可访问性必须与被覆盖的方法的安全性可访问性相匹配.
是否可以配置Autofac以使用ASP .NET MVC和ASP .NET Web Api.我知道依赖解析器是不同的.但是当使用记录的方法时,我只能设置一个全局解析器.
// Set the dependency resolver implementation.
GlobalConfiguration.Configuration.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud)
这种方法难道不好吗?我应该将我的解决方案分成两个项目并为每个项目处理依赖注入吗?
这两个范围有什么区别?
我正在Module
每层构建(存储库,服务,MVC应用程序),但为了让InstancePerHttpRequest
您需要Autofac.Mvc程序集.
我应该在我的存储库和服务层中使用哪个范围?
我是DI和IoC的新手,我正在尝试决定学习哪个IoC容器.我已经看到了几个性能比较,其中引用的三个容器似乎表现得非常好.但是,我没有找到包含Hiro或Simple Injector的功能比较.Autofac的社区似乎是最大的,但Hiro和Simple Injector在基准测试中非常快,而Simple Injector尤其声称非常容易学习.也就是说,我不想学习一个并且必须切换到另一个因为功能集有限.出于这个原因,我倾向于Autofac,因为它相当成熟,功能齐全(这里和这里的好文章),也是最快的IoC容器之一.有没有人对这三个容器中至少有两个有过经验?你能提供任何功能比较吗?
.net dependency-injection inversion-of-control autofac simple-injector
我正在尝试将 Autofac 添加到 .Net 6.0 Web API。我使用最新的 ASP.NET Core Web API 模板来生成单个启动 Program.cs 文件。
安装的 Autofac 版本:
Autofac 6.3.0
Autofac.Extensions.DependancyInjection (7.2.0-preview.1)
Run Code Online (Sandbox Code Playgroud)
安装的.Net 6.0版本:
Microsoft.AspNetCore.App 6.0.0-rc.2.21480.10
Microsoft.NETCore.App 6.0.0-rc.2.21480.5
Microsoft.WindowsDesktop.App 6.0.0-rc.2.21501.6
Run Code Online (Sandbox Code Playgroud)
以防万一,这是 Program.cs 文件的全部内容(是的,没有命名空间或类定义。只有 Program.cs 文件,没有 StartUp 类或 Startup.cs 文件)
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run()
Run Code Online (Sandbox Code Playgroud)
我尝试查看最新的 …
我对autofac很新,所以我可能会完全滥用它.
假设我有一个具有这种结构的类:
public class HelperClass : IHelperClass
{
public HelperClass(string a, string b)
{
this.A = a;
this.B = b;
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个使用该类的类,但构造函数需要不同的默认值.第二个构造函数仅用于测试目的 - 我们总是希望在"真实"应用程序中使用HelperClass:
public class DoesSomething: IDoesSomething
{
public DoesSomething()
: this(new HelperClass("do", "something"));
{
}
internal DoesSomething(IHelperClass helper)
{
this.Helper = helper;
}
}
public class DoesSomethingElse : IDoesSomethingElse
{
public DoesSomethingElse()
: this(new HelperClass("does", "somethingelse"));
{
}
internal DoesSomethingElse(IHelperClass helper)
{
this.Helper = helper;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的AutoFac模块:
public class SomethingModule: Module
{
protected override void Load(ContainerBuilder …
Run Code Online (Sandbox Code Playgroud)