相关疑难解决方法(0)

将依赖项注入自定义模型绑定器并使用Ninject使用InRequestScope

我正在使用NInject与NInject.Web.Mvc.

首先,我创建了一个简单的测试项目,我希望IPostRepository在同一Web请求期间在控制器和自定义模型绑定器之间共享一个实例.在我的真实项目中,我需要这个,因为我遇到IEntityChangeTracker问题,我有效地有两个存储库访问相同的对象图.因此,为了简化我的测试项目,我只是想共享一个虚拟存储库.

我遇到的问题是它适用于第一个请求,就是这样.相关代码如下.

NInjectModule:

public class PostRepositoryModule : NinjectModule
{
    public override void Load()
    {
        this.Bind<IPostRepository>().To<PostRepository>().InRequestScope();
    }
}
Run Code Online (Sandbox Code Playgroud)

CustomModelBinder:

public class CustomModelBinder : DefaultModelBinder
{
    [Inject]
    public IPostRepository repository { get; set; }

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        repository.Add("Model binder...");

        return base.BindModel(controllerContext, bindingContext);
    }
}

public class HomeController : Controller
{
    private IPostRepository repository;

    public HomeController(IPostRepository repository)
    {
        this.repository = repository;
    }

    public ActionResult Index(string whatever)
    {
        repository.Add("Action...");

        return View(repository.GetList());
    }
}
Run Code Online (Sandbox Code Playgroud)

Global.asax中: …

asp.net-mvc dependency-injection ninject model-binding custom-model-binder

7
推荐指数
3
解决办法
5286
查看次数

MVC 3传递实体作为接口

我目前正在使用Ninject作为我的DI工作的MVC 3项目,业务对象存储在一个单独的程序集中.我遇到了控制器参数的问题,当回发CRUD操作时,我收到错误"无法创建接口的实例".我知道你不能创建一个接口的实例,但似乎我可以解决的唯一方法是使用自定义模型绑定器并通过FormCollection.这看起来非常混乱,我想尽可能多地保留项目中特定类型的代码 - 因此在任何地方接口和Ninject到DI的混凝土.自定义模型绑定不仅看起来很乱 - 我不会丢失我的DataAnnotations吗?

一些代码来描述我的内容:

public ActionResult Create()
{
    // I'm thinking of using a factory pattern for this part
    var objectToCreate = new ConcereteType();
    return (objectToEdit);
}

[HttpPost]
public ActionResult Create(IRecord record)
{
    // check model and pass to repository
    if (ModelState.IsValue)
    {
        _repository.Create(record);
        return View();
    }

    return View(record);
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个?你是怎么克服它的?

谢谢!

dependency-injection interface model-binding loose-coupling asp.net-mvc-3

5
推荐指数
2
解决办法
4726
查看次数

如何使用支持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
查看次数