Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection NServiceBus依赖注入_Dependency Injection_Nservicebus_Nservicebus3 - Fatal编程技术网

Dependency injection NServiceBus依赖注入

Dependency injection NServiceBus依赖注入,dependency-injection,nservicebus,nservicebus3,Dependency Injection,Nservicebus,Nservicebus3,我在这方面有点麻烦 AndreasÖhlund就此回答了一个问题,但我无法用他给出的建议让它发挥作用 以下是我的设置: public abstract class CommandHandler<T> : IHandleMessages<T>, IDomainReadRepository where T : Command { public IDomainRepository DomainRepository { get; set; } protected

我在这方面有点麻烦

AndreasÖhlund就此回答了一个问题,但我无法用他给出的建议让它发挥作用

以下是我的设置:

public abstract class CommandHandler<T> : IHandleMessages<T>, IDomainReadRepository where T : Command
{
    public IDomainRepository DomainRepository { get; set; }

    protected abstract void OnProcess(T command);

    public TAggregate GetById<TAggregate>(Guid id) where TAggregate : IEventProvider, new()
    {
        return DomainRepository.GetById<TAggregate>(id);
    }

    public void Handle(T message)
    {
        OnProcess(message);
        // Domain repository will save.
    }
}
公共抽象类CommandHandler:IHandleMessages,IDomainReadRepository其中T:Command
{
公共IDomainRepository DomainRepository{get;set;}
受保护的抽象流程(T命令);
public TAggregate GetById(Guid id),其中TAggregate:IEventProvider,new()
{
返回DomainRepository.GetById(id);
}
公共无效句柄(T消息)
{
OnProcess(消息);
//域存储库将保存。
}
}
其思想是,特定的命令处理程序重写OnProcess方法并执行它们的操作,然后DomainRepository将保存所有内容

以下是我注册组件的方式:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With().DefiningCommandsAs(c => c.Namespace != null && c.Namespace.EndsWith("Commands"));
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<DomainRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<EventStore.Sql.EventStore>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<MongoDbObjectSecurityDescriptorRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<LocalTenantConfig>(DependencyLifecycle.InstancePerCall);
    }
}
公共类EndpointConfig:IConfigureThisEndpoint、AsA_服务器、IWantCustomInitialization
{
公共void Init()
{
Configure.With().DefiningCommandsAs(c=>c.Namespace!=null&&c.Namespace.EndsWith(“命令”);
Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent(DependencyLifecycle.InstancePerCall);
Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent(DependencyLifecycle.InstancePerCall);
Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent(DependencyLifecycle.InstancePerCall);
Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent(DependencyLifecycle.InstancePerCall);
}
}
这些都是DomainRepository使用的链下的所有对象;但是,当我收到命令时,DomainRepository为空。如果我注释掉行以注册DomainRepository所需的对象,我实际上会得到一个错误,说它无法创建它(Autofac DependencyResolutionException)

应该注意的是,所有其他对象都使用构造函数注入(它们取自以前存在的项目)。我试图改变他们使用公共财产注入,但没有任何区别


如果有人能指出我在这里做错了什么,我将不胜感激

将init方法中的代码移动到实现IneeInitialization的不同类中。在其中,使用Configure.Instance代替Configure.With(),也代替Configure.Instance.DefaultBuilder()