Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
C# Ninject依赖项注入-两个具体类_C#_Wpf_Dependency Injection_Ninject - Fatal编程技术网

C# Ninject依赖项注入-两个具体类

C# Ninject依赖项注入-两个具体类,c#,wpf,dependency-injection,ninject,C#,Wpf,Dependency Injection,Ninject,我正在学习用于依赖注入的Ninject,并有一个用例,其中两个类在WPF MVVM应用程序中实现相同的接口。在我的研究中,可以使用上下文绑定来绑定依赖项,但是我不确定在这种情况下如何工作 例如: public interface IModifyContent { string ModifyOperation(); } public class UpdateContent : IModifyContent { public string ModifyOperation() {

我正在学习用于依赖注入的Ninject,并有一个用例,其中两个类在WPF MVVM应用程序中实现相同的接口。在我的研究中,可以使用上下文绑定来绑定依赖项,但是我不确定在这种情况下如何工作

例如:

public interface IModifyContent {
    string ModifyOperation();
}

public class UpdateContent : IModifyContent {
    public string ModifyOperation() {
        return "This is the update operation";
    }
}

public class DeleteContent : IModifyContent {
    public string ModifyOperation() {
        return "This is the delete operation";
    }
}

public class ModifyFile {
    private IFileManager _fileManager;
    private IModifyContent _modifyContent;
    
    public ModifyFile(IFileManager fileManager, IModifyContent modifyContent) 
    {
        _fileManager = _fileManager;
        _modifyContent = modifyContent;
    }
    
    public void Modify() 
    {
        var fileContent = _fileManager.ReadFileContents(); // Returns file content
        
        var result = _modifyContent.ModifyOperation(); // ModifyOperation would actually modify content in some way...
        
        // Do stuff with result
    }
}
然后绑定看起来像这样:

Bind<IModifyContent>().To<UpdateContent>();
Bind<IModifyContent>().To<DeleteContent>();
// Other bindings
Bind().To();
绑定()到();
//其他绑定
在这方面,我的想法如下:

  • ModifyFile类用于修改文件时的通用功能,而IModifyContent的两个具体实现定义了不同操作可能出现的唯一行为
  • 根据调用/调用ModifyFile的内容,我希望传入IModifyContent的不同具体实现。即,当从更新业务逻辑或视图模型调用时,应将具体的UpdateContent作为依赖项传递给ModifyFile

首先,这是一种避免重复公共逻辑的良好设计方法,其次,我如何根据调用ModifyFile的类注入正确的具体实现?

我认为如果您的两个具体类来自不同的业务流, 您可以将它们注册为具体类,而不是抽象类

我是说你可以注册

Bind<UpdateContent>().To<UpdateContent>();
Bind<DeleteContent>().To<DeleteContent>();
Bind().To();
绑定()到();
在BusinessLogic类中,您可以要求具体的类


TLDR:两个类都有接口,这并不意味着你必须从那里使用它们。

你可能需要检查这两个类是否应该实现相同的接口。你可能违反了法律。