C# 一个DLL,两个应用程序有两个实现
我有一个带有一些类和方法的DLL。以及两个使用它的应用程序。 一个需要几乎所有方法的管理应用程序和一个只需要部分内容的客户端应用程序。但其中很大一部分都被他们两人使用。现在我想做一个包含管理员内容的DLL和一个包含客户端内容的DLLC# 一个DLL,两个应用程序有两个实现,c#,dll,C#,Dll,我有一个带有一些类和方法的DLL。以及两个使用它的应用程序。 一个需要几乎所有方法的管理应用程序和一个只需要部分内容的客户端应用程序。但其中很大一部分都被他们两人使用。现在我想做一个包含管理员内容的DLL和一个包含客户端内容的DLL 每次复制DLL和手动编辑都很糟糕 也许条件编译对我有帮助,但我不知道如何在三个项目的一个解决方案中用不同的编码编译DLL两次 对于这个问题,有没有比使用两个不同的DLL并在每次更改时手动编辑更好的方法?一般来说,您可能不希望在客户端公开管理代码。因为它是一个DLL,
对于这个问题,有没有比使用两个不同的DLL并在每次更改时手动编辑更好的方法?一般来说,您可能不希望在客户端公开管理代码。因为它是一个DLL,所以该代码正等待被利用,因为这些方法必然是公共的。更不用说反编译.NET DLL是件小事,它可能会暴露您的管理员程序的内部工作,而您确实不希望非管理员看到这些工作 如果要最大限度地减少代码重复,最好的方法(尽管不一定是“最简单的”)是使用3个DLL:
通常,您可能不希望在客户端公开管理代码。因为它是一个DLL,所以该代码正等待被利用,因为这些方法必然是公共的。更不用说反编译.NET DLL是件小事,它可能会暴露您的管理员程序的内部工作,而您确实不希望非管理员看到这些工作 如果要最大限度地减少代码重复,最好的方法(尽管不一定是“最简单的”)是使用3个DLL:
您是否考虑过在公共库上使用依赖项注入,即某种形式的构造函数注入,以确定执行期间需要应用的规则 下面是一个非常简单的示例:
public interface IWorkerRule
{
string FormatText(string input);
}
internal class AdminRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", "?");
}
}
internal class UserRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", ".");
}
}
public class Worker
{
private IWorkerRule Rule { get; set; }
public Worker(IWorkerRule rule)
{
Rule = rule;
}
public string FormatText(string text)
{
//generic shared formatting applied to any consumer
text = text.Replace("@", "*");
//here we apply the injected logic
text = Rule.FormatText(text);
return text;
}
}
class Program
{
//injecting admin functions
static void Main()
{
const string sampleText = "This message is @Important@ please do something about it!";
//inject the admin rules.
var worker = new Worker(new AdminRules());
Console.WriteLine(worker.FormatText(sampleText));
//inject the user rules
worker = new Worker(new UserRules());
Console.WriteLine(worker.FormatText(sampleText));
Console.ReadLine();
}
}
运行时,您将生成此输出
这条消息很重要,请做点什么
此消息非常重要*请采取措施。您是否考虑过在公共库上使用依赖项注入,即某种形式的构造函数注入,以确定执行期间需要应用的规则 下面是一个非常简单的示例:
public interface IWorkerRule
{
string FormatText(string input);
}
internal class AdminRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", "?");
}
}
internal class UserRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", ".");
}
}
public class Worker
{
private IWorkerRule Rule { get; set; }
public Worker(IWorkerRule rule)
{
Rule = rule;
}
public string FormatText(string text)
{
//generic shared formatting applied to any consumer
text = text.Replace("@", "*");
//here we apply the injected logic
text = Rule.FormatText(text);
return text;
}
}
class Program
{
//injecting admin functions
static void Main()
{
const string sampleText = "This message is @Important@ please do something about it!";
//inject the admin rules.
var worker = new Worker(new AdminRules());
Console.WriteLine(worker.FormatText(sampleText));
//inject the user rules
worker = new Worker(new UserRules());
Console.WriteLine(worker.FormatText(sampleText));
Console.ReadLine();
}
}
运行时,您将生成此输出
这条消息很重要,请做点什么
这条信息很重要,请做点什么。你为什么觉得这会有好处?瞧,你想解决什么问题…只是有一个较小的物理尺寸?你能详细说明这个问题吗?为什么要有两个DLL?对于管理员或客户端,相同方法的实现是否有所不同?为什么您认为这将是有益的?瞧,你想解决什么问题…只是有一个较小的物理尺寸?你能详细说明这个问题吗?为什么要有两个DLL?对于管理员或客户端,相同方法的实现是否不同?这是我考虑的另一件事。我希望有一个更简单的解决办法,但这似乎是最好的办法。谢谢你的帮助:)那是我考虑的另一件事。我希望有一个更简单的解决办法,但这似乎是最好的办法。感谢您的帮助:)它解决了我写的问题,但通过它,我将管理代码部署到客户身上,就像上面提到的十二面体一样。我以前从未使用过DI,我不确定它是否可以被利用。无论如何,谢谢你的时间+建议;)它rellay解决了我写的问题,但是通过它,我将管理代码部署到客户身上,就像上面提到的十二面体一样。我以前从未使用过DI,我不确定它是否可以被利用。无论如何,谢谢你的时间+建议;)