c# - 使用 StructureMap.DependencyInjection 在 C# dotnet core 2.0 中简单代理类依赖注入(inject)

标签 c# dependency-injection proxy .net-core structuremap

我正在使用 dotnet core 2.0 和 StructureMap.Microsoft.DependencyInjection用于 IoC 和依赖注入(inject)。我正在尝试创建一个用于验证的代理类。我试图暗示 IoC 的 DI 在使用 IComponentDataAccessor 时使用 ComponentDataAccessorProxy 并且还满足 ComponentDataAccessorProxy 依赖性,即 ComponentDataAccessor 并满足它的依赖性,即 IMongoDatabase 而不会陷入循环依赖性异常。我想知道是否有可能。任何帮助将不胜感激。

这是界面:

public interface IComponentDataAccessor
{
    Component SaveComponent(Component componentToAdd);
}

这是具体定义或具体类型:

public class ComponentDataAccessor : IComponentDataAccessor
{
    private readonly IMongoDatabase _database;

    public ComponentDataAccessor(IMongoDatabase database)
    {
      _database = database;
    }

    public Component SaveComponent(Component componentToAdd)
    {
        // actually save the componentToAdd
    }
}

最后这是一个代理类:

public class ComponentDataAccessorProxy : IComponentDataAccessor
{
    private readonly IComponentDataAccessor _componentDataAccessor;

    public ComponentDataAccessorProxy(IComponentDataAccessor componentDataAccessor)
    {
        _componentDataAccessor = componentDataAccessor;
    }

    public Component SaveComponent(Component componentToAdd)
    {
        // do some validation here, if everything is good then call 
        // concrete class otherwise throw an exception

        return _componentDataAccessor.SaveComponent(componentToAdd);
    }
}

失败的尝试:

var container = new Container();

container.Configure(config =>
{
    // failed attempt #1
    config.Forward<IComponentDataAccessor, ComponentDataAccessorProxy>();

    // failed attempt #2
    config.For<IComponentDataAccessor>().Use<ComponentDataAccessorProxy>();
});

最佳答案

根据文档here ,你应该使用这样的东西:

config.For<IComponentDataAccessor>().DecorateAllWith<ComponentDataAccessorProxy>();
config.For<IComponentDataAccessor>().Use<ComponentDataAccessor>();

关于c# - 使用 StructureMap.DependencyInjection 在 C# dotnet core 2.0 中简单代理类依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48132744/

相关文章:

c# - 如何将 C# List<string[]> 转换为 Javascript 数组?

c# - MVC 路由的许多可选参数

c# - 使用 Unity 设置依赖注入(inject)以将类的实例传递给构造函数

angular - 何时向 Angular 2 模块级别和 App 组件级别注入(inject)服务

c - 为什么代理 HTTP CONNECT 响应后 iPhone 没有响应

java - 如何为 JBoss 实例设置代理

c# - 在一个线程中锁定,在另一个线程中释放

c# - IEnumerable<T> 是如何反变的?

dependency-injection - Unity(等)实际上如何帮助依赖注入(inject)

Apache 端口转发