相关疑难解决方法(0)

我应该把ILogger,ILogger <T>,ILoggerFactory或ILoggerProvider用于库吗?

这可能与Passog ILogger或ILoggerFactory与AspNet Core中的构造函数有些关联但是,这特别是关于库设计,而不是关于使用这些库的实际应用程序如何实现其日志记录.

我写一个.NET 2.0标准库将通过的NuGet安装,并允许使用图书馆的人得到一些调试信息,我根据Microsoft.Extensions.Logging.Abstractions允许标准化的记录器被注入.

但是,我看到了多个接口,Web上的示例代码有时会使用ILoggerFactory并在类的ctor中创建一个记录器.还有ILoggerProvider看起来像Factory的只读版本,但实现可能会也可能不会实现两个接口,所以我必须选择.(工厂似乎比提供商更常见).

我见过的一些代码使用了非泛型ILogger接口,甚至可能共享同一个记录器的一个实例,有些代码接受ILogger<T>他们的ctor并期望DI容器支持开放泛型类型或显式注册ILogger<T>我的库中的每个变体使用.

现在,我确实认为这ILogger<T>是正确的方法,也许是一个不接受该论证而只是通过Null Logger的ctor.这样,如果不需要记录,则不使用任何记录.然而,一些DI容器选择了最大的ctor,因此无论如何都会失败.

我很好奇我应该在这里做什么来为用户创造最少的头痛,同时如果需要仍然允许适当的日志记录支持.

.net c# logging .net-core .net-standard

93
推荐指数
8
解决办法
2万
查看次数

为什么会在内置的ASP.NET Core DI Container上使用第三方DI Container?

目前缺乏关于DI主题的文档 - 依赖注入.有人可以帮我理解以下内容:

  1. 这些注册有什么区别?

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IService, Service>();
        services.AddScoped<IService, Service>();
        services.AddSingleton<IService, Service>();
        services.AddInstance(service);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用内置DI优于现有解决方案(NInject,Autofac,Structure Map)的优缺点是什么?
  3. 默认依赖注入的当前限制是什么(如果有的话)?

asp.net dependency-injection asp.net-core

40
推荐指数
4
解决办法
1万
查看次数

验证:如何使用Ninject注入模型状态包装器?

我正在查看本教程http://asp-umb.neudesic.com/mvc/tutorials/validating-with-a-service-layer--cs,了解如何围绕包装器包装我的验证数据.

我想使用依赖注入.我正在使用ninject 2.0

namespace MvcApplication1.Models
{
    public interface IValidationDictionary
    {
        void AddError(string key, string errorMessage);
        bool IsValid { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

//包装

using System.Web.Mvc;

namespace MvcApplication1.Models
{
    public class ModelStateWrapper : IValidationDictionary
    {

        private ModelStateDictionary _modelState;

        public ModelStateWrapper(ModelStateDictionary modelState)
        {
            _modelState = modelState;
        }

        #region IValidationDictionary Members

        public void AddError(string key, string errorMessage)
        {
            _modelState.AddModelError(key, errorMessage);
        }

        public bool IsValid
        {
            get { return _modelState.IsValid; }
        }

        #endregion
    }
}
Run Code Online (Sandbox Code Playgroud)

//控制器

private IProductService _service;

public ProductController() 
{ …
Run Code Online (Sandbox Code Playgroud)

c# ninject ioc-container modelstate asp.net-mvc-2

32
推荐指数
1
解决办法
1万
查看次数

Ninject in .NET Core

我试图在2016年5月发布的.NET Core中安装Ninject 3.3.2.我收到一个错误:依赖Ninject 3.2.2不支持框架.NETCoreApp,Version = v1.0.有没有人有类似的问题,有什么解决方案吗?

.net c# asp.net ninject .net-core

15
推荐指数
3
解决办法
2万
查看次数

ASP.net vnext依赖注入

我听说在下一版本的ASP.NET(ASP.NET vnext)中,将在框架中内置依赖注入.有谁知道更多关于这个?它会是统一还是新框架?我在哪里可以找到更多相关信息?

.net asp.net dependency-injection asp.net-core

14
推荐指数
1
解决办法
3742
查看次数

我如何开始使用ASP.NET(5)Core和Castle Windsor进行依赖注入?

背景:

根据Castle Windsor教程和早期版本的MVC(pre-6)和WebAPI,我使用了Castle Windsor与安装人员和设施.

ASP.NET(5)Core已经包含了一些依赖注入支持,但我仍然没有弄清楚如何连接它,我发现的几个样本看起来与我之前使用它的方式有很大不同(使用安装/设施).大多数示例早于ASP.NET(5)核心最近发布,有些似乎已经过时的信息.

它似乎从之前版本的组合根设置中发生了极大的变化,Microsoft.Framework.DependencyInjection.ServiceProvider当我将其设置为Castle Windsor DI后备时,甚至无法解析所有依赖项.我还在深入研究细节,但没有太多最新信息.

我试图将Castle Windsor用于DI

我找到了这样的适配器:Github Castle.Windsor DI容器.

Startup.cs

    private static IWindsorContainer container;
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
    {
        container = new WindsorContainer();
        app.UseServices(services =>
        {
            // ADDED app.ApplicationServices FOR FALLBACK DI
            container.Populate(services, app.ApplicationServices);
            container.BeginScope();
            return container.Resolve<IServiceProvider>();
        });
        // ... default stuff
Run Code Online (Sandbox Code Playgroud)

WindsorRegistration.cs 我添加了几行来添加Castle Windsor ILazyComponentLoader后备.

using Castle.MicroKernel.Lifestyle;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.Resolvers.SpecializedResolvers;
using Castle.Windsor;
using Microsoft.Framework.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Reflection;

namespace Notes.Infrastructure
{
    /// <summary> …
Run Code Online (Sandbox Code Playgroud)

dependency-injection castle-windsor asp.net-core-mvc asp.net-core

14
推荐指数
2
解决办法
7457
查看次数

如何将Ninject集成到ASP.NET Core 2.0 Web应用程序中?

我发现Ninject最近引入了对.NET Standard 2.0/.NET Core 2.0的支持.

但是,我找不到任何实际将其集成到Web应用程序中的扩展(例如类似于Ninject.Web.Common)

从旧的ASP.NET MVC解决方案的代码看,我意识到整个机制是不同的,因为它依赖于经典的机制,WebActivatorEx.PreApplicationStartMethod并且WebActivatorEx.ApplicationShutdownMethodAttribute在ASP.NET Core中不再可用.

此外,旧Ninject.Web.Common程序集提供了几个用于初始化的有用类--Bootstrapper,OnePerRequestHttpModule,NinjectHttpModule:

public static void Start()
{
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
    Bootstrapper.Initialize(CreateKernel);
}
Run Code Online (Sandbox Code Playgroud)

问题:有没有关于如何将Ninject集成到ASP.NET Core 2.0 Web应用程序中的示例?

ninject asp.net-core-2.0

11
推荐指数
1
解决办法
5284
查看次数

将Ninject转换为ASP.NET MVC 6 DI

我试图进入新的ASP.NET MVC 6的东西,但我很难用他们的新DI系统.我试图在线查找资源,但我找到的所有内容仅涵盖使用它的绝对最低限度.

我之前使用的是Ninject,我有几个这样工作的连线:

Bind<IDocumentStore>()
    .ToMethod(c => CreateDocumentStore())
    .InSingletonScope();

private static IDocumentStore CreateDocumentStore() {
    // lots of initialization code, etc.
    return documentStore;
}
Run Code Online (Sandbox Code Playgroud)

但到目前为止,我很难找到如何将这种行为转化为微软的新DI系统.我能找到的只是这样的例子:

services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
Run Code Online (Sandbox Code Playgroud)

和:

services.AddMvc();
Run Code Online (Sandbox Code Playgroud)

一切似乎完全在目标服务的默认构造函数上工作.有没有办法在这个新的DI系统中产生我需要的行为?

我见过了

services.Configure<TOptions>(options => {});
Run Code Online (Sandbox Code Playgroud)

但我不清楚这是否会影响我的想法,或者它是否留给特定的行为.

asp.net-mvc dependency-injection asp.net-core-mvc

9
推荐指数
1
解决办法
2141
查看次数

如何用我自己的IoC替换内置的IoC?

众所周知在asp.net Startup类中有一个方法ConfigureServices我们可以添加自定义服务.服务通过依赖注入提供.

ASP.NET Core包含一个简单的内置控制反转(IoC)容器,默认支持构造函数注入,但可以轻松替换为您选择的IoC容器.除了松耦合优势外,DI还可以在整个应用中提供服务

我的问题是如何用我自己的IoC替换内置的IoC?

如果你有,请给我一个例子.

asp.net-core

3
推荐指数
1
解决办法
949
查看次数

ASP.NET Core 内置 DI 系统中的 DI 模块

我已经使用 NInject 有一段时间了,现在我将在 Asp.net core 中启动一个项目。似乎NInject 不能与 Asp.net Core 一起使用。所以现在我的问题是 Asp.net core 是否像 NInject或其他 di 容器提供的那样提供任何di 模块

dependency-injection asp.net-core

2
推荐指数
1
解决办法
4435
查看次数