gpt4 book ai didi

C# 依赖注入(inject) - 良好实践

转载 作者:行者123 更新时间:2023-11-30 16:40:24 24 4
gpt4 key购买 nike

我在理解如何创建可注入(inject)类时遇到一些问题......

这是我的例子:

public interface IService
{
string FindSomeData()
}

现在我们创建一个实现接口(interface)的类:

public class FolderService : IService
{
private string _path;

public FolderService(string path)
{
_path = path;
}

public string FindSomeData()
{
//Open a folder using _path and find some data
}
}

也许还有其他类:

public class DbService : IService
{
private MyConnectionClass _connection;

public DbService(MyConnectionClass connection)
{
_connection = connection;
}

public string FindSomeData()
{
//Connect to database using _connection object and find some data
}
}

现在我想将其中一个类添加到 IoC 容器中,例如:

if (InDebug)
SimpleIoc.Default.Register<IService, FolderService>();
else
SimpleIoc.Default.Register<IService, DbService>();

知道我有问题。当我想将这个对象传递给其他一些类的构造函数时:

public MyViewModel(IService service)
{
_service = service;
}
// Read folder name from TextBox on View and then call _service.FindSomeData

在这种情况下,我想将用户选择的路径传递给 IService 对象 (FolderService)。我应该如何以正确的方式执行此操作(根据 SOLID 和其他良好实践模式……)?

一旦我应该传递字符串(文件夹路径),一次是 MyConnectionClass(如果连接到数据库)。做这类事情的最佳方式是什么?

最好的问候,迈克尔

最佳答案

您可以将文件夹路径提供/更改逻辑封装到单独的提供程序中,如 IFolderPathProvider 并将其注入(inject)到 FolderService

public interface IFolderPathProvider {
string GetFolderPath();
void SetFolderPath(string);
}

public class FolderPathProvider : IFolderPathProvider {
...
}

public class FolderService : IService
{
private IFolderPathProvider _folderPathProvider;

public FolderService(IFolderPathProvider folderPathProvider)
{
_folderPathProvider = folderPathProvider;
}

public string FindSomeData()
{
string path = _folderPathProvider.GetFolderPath();
//Open a folder using path and find some data
}
}

当用户更改路径时,将 IFolderPathProvider 注入(inject)处理程序并调用 SetFolderPath。同样,您可以创建 IDbConnectionProvider。根据情况,它们可以组合成一个 DataConfigProvider 但我不确定您到底需要什么;主要思想是将文件夹路径/数据库连接更改逻辑与服务分开,并继续使用依赖注入(inject)。

关于C# 依赖注入(inject) - 良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51441617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com