我有一个类(A类),它有一个名为methodA的方法。
class A
{
public Dictionary<string, double> methodA(double param1, double param2)
{
//do calculations
return result;
}
}
我还有9个其他课程(B,C,......)。它们都有一个名为myField的字段。 myField的值是使用类A的methodA计算的。它们如下所示:
class B
{
private Dictionary<string, double> myField;
private readonly A a = new A();
public B()
{
myField = a.methodA(param1, param2)
}
// methods using myField
}
param1和param2是永不改变并存储在别处的值。因此,对于所有类和应用程序的完整运行时,myField的值都是相同的。现在有一个设计变化。 methodA更新并检查某个条件是否为真,并根据运行时期间正在更改的条件和参数param3,param4计算myField的值。
public Dictionary<string, double> methodA(double param1, double param2, double param3, double param4)
{
if(condition)
{
result = .....
} else {
result = .....
}
return result;
}
条件最初为false,并且在运行时期间仅更改一次。之后,myField的值应保持不变,直到运行结束。
我应该如何在我的类定义中实现它,以便myField的值在条件为真后更新一次并保持不变直到运行时结束?
答案 0 :(得分:1)
您已将依赖注入添加为标记但尚未在示例中使用它。实现它并使A类成为一个注入服务(使用接口),它具有像单例一样的生命周期,然后将它注入到其他类中,瞧,你将拥有相同值的相同实例。以下是我通常的做法:
const endpoint = 'https://itunes.apple.com/search
term=jack+johnson&entity=song';
const searchInput = document.querySelector('.search');
const btn = document.querySelector('.btn-srch');
const paginationBtn = document.querySelector('.pagination');
const resultTile = document.querySelector('.container .row');
let songs = [];
paginationBtn.style.setProperty('display', 'none');
fetch(endpoint)
.then(blob => blob.json())
.then(data => songs = data.results);
function findSongs(wordToMatch, songs) {
return songs.filter(title => {
const regex = new RegExp(wordToMatch, 'gi');
return title.trackName.match(regex) || title.artistName.match(regex);
});
};
function displaySong() {
const songsArray = findSongs(this.value, songs);
console.log(songsArray);
for(let i = 0; i < 8; i++) {
const build = songsArray.map(title => {
return `
<div class="tile col-xs-12 col-sm-12 col-md-4">
<div class="picture">
<img src="img/268x0w.jpg" alt="album picture" class="img-responsive">
</div>
<div class="text">
<h6 class="title">${title.trackName}</h6>
<span class="separator"></span>
<p class="author">${title.artistName}</p>
</div>
</div>
`;
}).join('');
resultTile.innerHTML = build;
}
if (songsArray.length >= 9) {
console.log('more');
paginationBtn.style.setProperty('display', 'flex');
} else {
paginationBtn.style.setProperty('display', 'none');
}
};
searchInput.addEventListener('change', displaySong);
然后神奇地将它传递给你的构造函数:
Container.RegisterType<IAPICacheManager, APICacheManager>(new ContainerControlledLifetimeManager());
以下是一个让您入门的示例: Unity
答案 1 :(得分:0)
如果myField的值必须在所有类中相同,我会考虑将其设为公共静态字段