相关疑难解决方法(0)

绑定Ninject 3.0中的泛型类型

我希望Ninject为实现通用接口的特定程序集中的所有类型创建Bindings,而不是在运行时全部指定它们.有点像开放式仿制药在Autofac中的运作方式.

这就是我想出来的......

kernel.Bind(x => x.FromThisAssembly()
    .SelectAllClasses()
    .Where(t => t.IsAssignableFrom(
        typeof(ICommandHandler<>)))
        .BindAllInterfaces());
Run Code Online (Sandbox Code Playgroud)

调用下面的方法,我希望实现所有类型的数组,ICommandHandler<T>但它不产生任何...

public void Process<TCommand>(TCommand command) 
    where TCommand : ICommand
{
    var handlers = 
        _kernel.GetAll<ICommandHandler<TCommand>>();

    foreach(var handler in handlers)
    {
        handler.Handle(command);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有现成的方法来实现这一目标?或者我是否需要使用convention API自行推送?

这似乎是一种相当普遍的模式,并且想知道如果不编写自己的实现就可以实现这一点.

.net c# generics ninject ioc-container

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

如何使用约束绑定泛型类型

我正在使用NinjectDI容器.我有两个

public interface IRepository<T> where T : AbstractEntity<T>, IAggregateRoot
{ 
    // methods signatures
}

public class Repository<T> : IRepository<T> where T : AbstractEntity<T>, IAggregateRoot
{
    // implementations
} 
Run Code Online (Sandbox Code Playgroud)

然后我试图将它们绑定在一个单独的模块中

public class DataAccessModule : Ninject.Modules.NinjectModule
{
    public override void Load()
    {
        this.Bind<IRepository<>>().To<Repository<>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里this.Bind<IRepository<>>().To<Repository<>>();不被承认为陈述.

如何进行绑定?

c# generics ninject

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

使用NInject注册通用接口的泛型类

我有三个通用接口

public interface IRepositorioBase<T> where T : class {    }
public interface IServiceBase<T> where T : class {}
public interface IAppBase<T> where T : class {}
Run Code Online (Sandbox Code Playgroud)

我有三个相应的具体泛型类实现

public class RepositorioBase<T> where T : class {    }
public class ServiceBase<T> where T : class {}
public class AppBase<T> where T : class {}
Run Code Online (Sandbox Code Playgroud)

而另一个类是使用类泛型创建的,例如

public class ExpenseCardRepository : RepositoryBase<ExpenseCard>, IExpenseCardRepository{ }

public class ExpenseCardService : ServiceBase<ExpenseCard>, IExpenseCardService
{
    private readonly IExpenseCardRepository _repository;

    public ExpenseCardService(IExpenseCardRepository repository) : base(repository)
    {
        _repository = repository; …
Run Code Online (Sandbox Code Playgroud)

c# generics ninject interface

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

标签 统计

c# ×3

generics ×3

ninject ×3

.net ×1

interface ×1

ioc-container ×1