在两个服务的构造函数之间检测到周期性依赖[Ninject和MVC]

时间:2015-01-28 18:11:46

标签: c# asp.net-mvc ninject

我需要有关WCF服务中存在的方法的帮助。 让我展示一下我要做的事情:

首先,我创建了一个公共类,就像这样:

public class TEnvironment : ITEnvironment
{
    private readonly IUserService _userService;

    public TEnvironment(IUserService userService)
    {
        _userService = userService;
    }

    public string GetUserName(string user, string password)
    {
        string userName;
        var username = _userService.GetByLoginAndPassword(user, password);

        userName = username.UserName;

        return userName;
    }
}

在此之后,我创建了一个界面:

public interface ITEnvironment
{
    string GetUserName(string user, string password);
}

最后,我在我的应用程序(MVC)中创建了一个控制器,添加了这个:

public class UserController : BootstrapBaseController
{
    private readonly ITEnvironment _tEnvironment;

    public UserController (ITEnvironment tEnvironment)
    {
        _tEnvironment = tEnvironment;

    }

}

如果我评论该块:

public UserController (ITEnvironment tEnvironment)
    {
        _tEnvironment = tEnvironment;

    }

我的应用程序运行。但我需要方法" GetUserName(用户,密码)"。如果我不评论该块,则会生成一个例外:

使用从ITEnvironment到TEnvironment的绑定激活ITEnvironment时出错

在两个服务的构造函数之间检测到周期性依赖性。 激活路径:

 3)将依赖ITEnvironment注入到TEnvironment类型的构造函数的参数userService中  2)将依赖ITEnvironment注入到UserController类型构造函数的参数环境中  1)对UserController的请求

建议:

 1)确保您未在​​任何服务实现上声明ITEnvironment的依赖关系  2)考虑将服务组合成一个服务以消除周期  3)使用属性注入代替构造函数注入,并实现IInitializable

如果需要在注入属性值后运行初始化逻辑。

嗯,有一个现在绑定到我的班级" DependencyModule.cs",你可以在下面看到:

public class DependencyModule : NinjectModule
{
    public override void Load()
    {
        Bind<ITEnvironment>().To<TEnvironment>();
    }
}

编辑:

这是我的UserService:

public class UserService : IUserService
{
    private readonly IRepository<User> _userData;

    public UserService(IRepository<User> userRepository)
    {
        _userData = userRepository;
    }

    public User GetByLoginAndPassword(string username, string password)
    {
        var userInfo = _userData.Table.SingleOrDefault(x => x.Login == login);

        if (userInfo == null)
            throw new EntityNotFoundException("Invalid user name or password");

        return userInfo;
    }
}

IUserService:

public interface IUserService
{
    User GetByLoginAndPassword(string username, string password);
}

现在......我做错了什么是最大的问题......

0 个答案:

没有答案