小编Jer*_*ong的帖子

Autofac无法解析asp.net 5中的程序集扫描类型

我们有一个dnx46 Web项目,它在启动期间使用autofac程序集扫描来注册类型.我们的project.json依赖包括:

"Autofac.Configuration": "4.0.0-rc1-268",
"Autofac.Extensions.DependencyInjection": "4.0.0-rc1-177",
"Autofac.Extras.CommonServiceLocator": "3.2.0",
"Microsoft.AspNet.Hosting": "1.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.ViewFeatures": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.Session": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
"Newtonsoft.Json": "8.0.3"
Run Code Online (Sandbox Code Playgroud)

我们的startup.cs ConfigureServices方法如下所示:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddSingleton(serviceType => Configuration);
    services.AddInstance<Microsoft.Extensions.Configuration.IConfiguration>(Configuration);

    services.AddCaching();
    services.AddSession();
    services.AddMvc();

    var builder = new ContainerBuilder();

    var assemblies = Directory.GetFiles(<ourBinDirectoryPath>, "*.dll", SearchOption.TopDirectoryOnly).Select(Assembly.LoadFrom);

    foreach (var assembly in assemblies)
    {
        builder.RegisterAssemblyTypes(assembly).Where(t => t.Name.EndsWith("Service") || t.Name.EndsWith("Repository") || t.Name.EndsWith("DataContext")).AsSelf().AsImplementedInterfaces();
        builder.RegisterAssemblyTypes(assembly).Where(t => …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc autofac

7
推荐指数
1
解决办法
835
查看次数

如何使用支持ASP.NET Core中的依赖项注入的自定义模型绑定器?

我正在尝试在MVC中使用自定义模型绑定程序,该绑定程序需要从IoC容器中解析。我遇到的问题是,在添加MVC服务时无法访问我的容器,因为还没有构建我的容器(并且我需要在构建容器之前添加MVC)。感觉就像是鸡/鸡蛋的问题,我确信我缺少一个简单的解决方案。

例:

services.AddMvc().AddMvcOptions(options =>
{
     options.ModelBinders.Add(serviceProvider.Resolve<CustomModelBinder>());
});
Run Code Online (Sandbox Code Playgroud)

我的自定义模型活页夹如下所示:

public class CustomModelBinder : IModelBinder
{
    private IServiceProvider serviceProvider;

    public CustomModelBinder(IServiceProvider serviceProvider)
    {
        this.serviceProvider = serviceProvider;
    }

    public Task<ModelBindingResult> BindModelAsync(ModelBindingContext bindingContext)
    {
        var model = serviceProvider.GetService(bindingContext.ModelType);
        bindingContext.Model = model;

        var binder = new GenericModelBinder();
        return binder.BindModelAsync(bindingContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection model-binding autofac asp.net-core

5
推荐指数
1
解决办法
795
查看次数

为什么asp.net mvc 模型活页夹读取视图模型属性?

当我在视图模型中的属性的 getter 上放置断点时,asp.net 核心模型绑定正在读取我的属性值。这是在实际视图中使用视图模型之前。这样做有什么理由吗?模型绑定应该用于从值提供者设置视图模型上的属性,而不是从视图模型中读取它们。有没有办法防止这种情况?

编辑:由于没有提供轻松复制的步骤,因此投票结束此问题,因此它们在这里。在 asp.net 核心项目中创建以下控制器:

public class TestController : Controller
{
    public IActionResult Test(TestViewModel model)
    {
        return View(model);
    }

    public class TestViewModel
    {
        public string TestProperty
        {
            get
            {
                return "";
            }

            set
            {
                return;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您将断点放在 getter 中,并在测试控制器操作中设置一个断点,您将看到 getter 在它实际进入控制器操作以供视图使用之前被访问。此时似乎不应该读取视图模型中的属性。只需寻找有关为什么会发生这种情况的想法,以及是否有可能(或一个好主意)来防止这种行为。谢谢!

c# asp.net-mvc asp.net-core

5
推荐指数
1
解决办法
588
查看次数