我需要有关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);
}
现在......我做错了什么是最大的问题......